diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index 27fd7d1a..1728b036 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -89,13 +89,18 @@ static NTSTATUS FspFsvolFileSystemControlReparsePoint( { PAGED_CODE(); + FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); + PFILE_OBJECT FileObject = IrpSp->FileObject; + + /* do we support reparse points? */ + if (!FsvolDeviceExtension->VolumeParams.ReparsePoints) + return STATUS_INVALID_DEVICE_REQUEST; + /* is this a valid FileObject? */ - if (!FspFileNodeIsValid(IrpSp->FileObject->FsContext)) + if (!FspFileNodeIsValid(FileObject->FsContext)) return STATUS_INVALID_DEVICE_REQUEST; NTSTATUS Result; - FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); - PFILE_OBJECT FileObject = IrpSp->FileObject; FSP_FILE_NODE *FileNode = FileObject->FsContext; FSP_FILE_DESC *FileDesc = FileObject->FsContext2; ULONG FsControlCode = IrpSp->Parameters.FileSystemControl.FsControlCode; @@ -110,10 +115,6 @@ static NTSTATUS FspFsvolFileSystemControlReparsePoint( ASSERT(FileNode == FileDesc->FileNode); - /* do we support reparse points? */ - if (!FsvolDeviceExtension->VolumeParams.ReparsePoints) - return STATUS_INVALID_DEVICE_REQUEST; - if (IsWrite) { if (0 == InputBuffer || 0 == InputBufferLength || @@ -286,6 +287,10 @@ NTSTATUS FspFsvolFileSystemControlComplete( { FSP_ENTER_IOC(PAGED_CODE()); + /* exit now if we do not have a FileObject (FSP_FSCTL_WORK*) */ + if (0 == IrpSp->FileObject) + FSP_RETURN(); + if (!NT_SUCCESS(Response->IoStatus.Status)) { Irp->IoStatus.Information = 0;