diff --git a/src/sys/create.c b/src/sys/create.c index 9ecfa68e..18cd264f 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -238,10 +238,6 @@ static NTSTATUS FspFsvolCreateNoLock( FileName.Length = (USHORT) ((PUINT8)StreamPart.Buffer - (PUINT8)FileName.Buffer + StreamPart.Length); - - MainFileName.Length = MainFileName.MaximumLength = (USHORT) - ((PUINT8)StreamPart.Buffer - (PUINT8)FileName.Buffer - sizeof(WCHAR)); - MainFileName.Buffer = FileName.Buffer; } /* is this a relative or absolute open? */ @@ -381,7 +377,13 @@ static NTSTATUS FspFsvolCreateNoLock( goto main_stream_exit; } - Result = FspMainFileOpen(FsvolDeviceObject, + MainFileName.Length = MainFileName.MaximumLength = (USHORT) + ((PUINT8)StreamPart.Buffer - (PUINT8)FileName.Buffer - sizeof(WCHAR)); + MainFileName.Buffer = FileName.Buffer; + + Result = FspMainFileOpen( + FsvolDeviceObject, + FileObject->DeviceObject, /* use as device hint when using MUP */ &MainFileName, CaseSensitive, SecurityDescriptor, FileAttributes, @@ -406,9 +408,6 @@ static NTSTATUS FspFsvolCreateNoLock( /* remember the main file node */ FileNode->MainFileNode = FileDesc->MainFileObject->FsContext; - ASSERT(RtlEqualUnicodeString(&MainFileName, &FileNode->MainFileNode->FileName, - !CaseSensitive)); - Result = STATUS_SUCCESS; main_stream_exit: diff --git a/src/sys/driver.h b/src/sys/driver.h index 17e611a4..40da8934 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -1025,6 +1025,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, PUNICODE_STRING FileName, BOOLEAN Reset); NTSTATUS FspMainFileOpen( PDEVICE_OBJECT FsvolDeviceObject, + PDEVICE_OBJECT DeviceObjectHint, PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG FileAttributes, diff --git a/src/sys/file.c b/src/sys/file.c index 094e7512..8470614a 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -72,6 +72,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, PUNICODE_STRING FileName, BOOLEAN Reset); NTSTATUS FspMainFileOpen( PDEVICE_OBJECT FsvolDeviceObject, + PDEVICE_OBJECT DeviceObjectHint, PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG FileAttributes, @@ -1253,6 +1254,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, NTSTATUS FspMainFileOpen( PDEVICE_OBJECT FsvolDeviceObject, + PDEVICE_OBJECT DeviceObjectHint, PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG FileAttributes, @@ -1297,7 +1299,6 @@ NTSTATUS FspMainFileOpen( FullFileName.Length = 0; FullFileName.MaximumLength = FsvolDeviceExtension->VolumeName.Length + - FsvolDeviceExtension->VolumePrefix.Length + MainFileName->Length; FullFileName.Buffer = FspAlloc(FullFileName.MaximumLength); if (0 == FullFileName.Buffer) @@ -1307,7 +1308,6 @@ NTSTATUS FspMainFileOpen( } RtlAppendUnicodeStringToString(&FullFileName, &FsvolDeviceExtension->VolumeName); - RtlAppendUnicodeStringToString(&FullFileName, &FsvolDeviceExtension->VolumePrefix); RtlAppendUnicodeStringToString(&FullFileName, MainFileName); InitializeObjectAttributes( @@ -1321,7 +1321,8 @@ NTSTATUS FspMainFileOpen( DriverCreateContext.Size = FIELD_OFFSET(IO_DRIVER_CREATE_CONTEXT, TxnParameters) + sizeof(((PIO_DRIVER_CREATE_CONTEXT)0)->TxnParameters); - DriverCreateContext.DeviceObjectHint = FsvolDeviceObject; + DriverCreateContext.DeviceObjectHint = 0 != FsvolDeviceExtension->FsvrtDeviceObject ? + FsvolDeviceObject : DeviceObjectHint; IoStatus.Status = FsRtlAllocateExtraCreateParameterList(0, &DriverCreateContext.ExtraCreateParameter);