+ switch (FileInformationClass)
+ {
+ case FileRenameInformation:
+ if (!((FILE_RENAME_INFORMATION *)FileInformation)->RootDir)
+ StackPtr->Parameters.SetFile.FileObject=NULL;
+ else
+ {
+ /* Get the file object from the file handle */
+ Status = ObReferenceObjectByHandle(((FILE_RENAME_INFORMATION *)FileInformation)->RootDir,
+ (FILE_ADD_FILE | FILE_ADD_SUBDIRECTORY),
+ IoFileObjectType,
+ KernelMode, /* FIXME: or UserMode ? */
+ (PVOID *)&RootDir_FileObject,
+ NULL);
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
+ StackPtr->Parameters.SetFile.FileObject=RootDir_FileObject;
+ }
+ StackPtr->Parameters.SetFile.u.d.ReplaceIfExists=((FILE_RENAME_INFORMATION *)FileInformation)->Replace;
+ StackPtr->Parameters.SetFile.u.d.AdvanceOnly=FALSE;
+ break;
+ default:;
+ }