sys: FspMainFileOpen

This commit is contained in:
Bill Zissimopoulos 2016-10-05 00:32:04 -07:00
parent 7e1861a9f5
commit 352450d538
3 changed files with 12 additions and 11 deletions

View File

@ -238,10 +238,6 @@ static NTSTATUS FspFsvolCreateNoLock(
FileName.Length = (USHORT) FileName.Length = (USHORT)
((PUINT8)StreamPart.Buffer - (PUINT8)FileName.Buffer + StreamPart.Length); ((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? */ /* is this a relative or absolute open? */
@ -381,7 +377,13 @@ static NTSTATUS FspFsvolCreateNoLock(
goto main_stream_exit; 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, &MainFileName, CaseSensitive,
SecurityDescriptor, SecurityDescriptor,
FileAttributes, FileAttributes,
@ -406,9 +408,6 @@ static NTSTATUS FspFsvolCreateNoLock(
/* remember the main file node */ /* remember the main file node */
FileNode->MainFileNode = FileDesc->MainFileObject->FsContext; FileNode->MainFileNode = FileDesc->MainFileObject->FsContext;
ASSERT(RtlEqualUnicodeString(&MainFileName, &FileNode->MainFileNode->FileName,
!CaseSensitive));
Result = STATUS_SUCCESS; Result = STATUS_SUCCESS;
main_stream_exit: main_stream_exit:

View File

@ -1025,6 +1025,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
PUNICODE_STRING FileName, BOOLEAN Reset); PUNICODE_STRING FileName, BOOLEAN Reset);
NTSTATUS FspMainFileOpen( NTSTATUS FspMainFileOpen(
PDEVICE_OBJECT FsvolDeviceObject, PDEVICE_OBJECT FsvolDeviceObject,
PDEVICE_OBJECT DeviceObjectHint,
PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive, PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive,
PSECURITY_DESCRIPTOR SecurityDescriptor, PSECURITY_DESCRIPTOR SecurityDescriptor,
ULONG FileAttributes, ULONG FileAttributes,

View File

@ -72,6 +72,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
PUNICODE_STRING FileName, BOOLEAN Reset); PUNICODE_STRING FileName, BOOLEAN Reset);
NTSTATUS FspMainFileOpen( NTSTATUS FspMainFileOpen(
PDEVICE_OBJECT FsvolDeviceObject, PDEVICE_OBJECT FsvolDeviceObject,
PDEVICE_OBJECT DeviceObjectHint,
PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive, PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive,
PSECURITY_DESCRIPTOR SecurityDescriptor, PSECURITY_DESCRIPTOR SecurityDescriptor,
ULONG FileAttributes, ULONG FileAttributes,
@ -1253,6 +1254,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
NTSTATUS FspMainFileOpen( NTSTATUS FspMainFileOpen(
PDEVICE_OBJECT FsvolDeviceObject, PDEVICE_OBJECT FsvolDeviceObject,
PDEVICE_OBJECT DeviceObjectHint,
PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive, PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive,
PSECURITY_DESCRIPTOR SecurityDescriptor, PSECURITY_DESCRIPTOR SecurityDescriptor,
ULONG FileAttributes, ULONG FileAttributes,
@ -1297,7 +1299,6 @@ NTSTATUS FspMainFileOpen(
FullFileName.Length = 0; FullFileName.Length = 0;
FullFileName.MaximumLength = FullFileName.MaximumLength =
FsvolDeviceExtension->VolumeName.Length + FsvolDeviceExtension->VolumeName.Length +
FsvolDeviceExtension->VolumePrefix.Length +
MainFileName->Length; MainFileName->Length;
FullFileName.Buffer = FspAlloc(FullFileName.MaximumLength); FullFileName.Buffer = FspAlloc(FullFileName.MaximumLength);
if (0 == FullFileName.Buffer) if (0 == FullFileName.Buffer)
@ -1307,7 +1308,6 @@ NTSTATUS FspMainFileOpen(
} }
RtlAppendUnicodeStringToString(&FullFileName, &FsvolDeviceExtension->VolumeName); RtlAppendUnicodeStringToString(&FullFileName, &FsvolDeviceExtension->VolumeName);
RtlAppendUnicodeStringToString(&FullFileName, &FsvolDeviceExtension->VolumePrefix);
RtlAppendUnicodeStringToString(&FullFileName, MainFileName); RtlAppendUnicodeStringToString(&FullFileName, MainFileName);
InitializeObjectAttributes( InitializeObjectAttributes(
@ -1321,7 +1321,8 @@ NTSTATUS FspMainFileOpen(
DriverCreateContext.Size = DriverCreateContext.Size =
FIELD_OFFSET(IO_DRIVER_CREATE_CONTEXT, TxnParameters) + FIELD_OFFSET(IO_DRIVER_CREATE_CONTEXT, TxnParameters) +
sizeof(((PIO_DRIVER_CREATE_CONTEXT)0)->TxnParameters); sizeof(((PIO_DRIVER_CREATE_CONTEXT)0)->TxnParameters);
DriverCreateContext.DeviceObjectHint = FsvolDeviceObject; DriverCreateContext.DeviceObjectHint = 0 != FsvolDeviceExtension->FsvrtDeviceObject ?
FsvolDeviceObject : DeviceObjectHint;
IoStatus.Status = FsRtlAllocateExtraCreateParameterList(0, IoStatus.Status = FsRtlAllocateExtraCreateParameterList(0,
&DriverCreateContext.ExtraCreateParameter); &DriverCreateContext.ExtraCreateParameter);