update for HEAD-2003091401
[reactos.git] / ntoskrnl / io / vpb.c
index 72744a5..44803e5 100644 (file)
@@ -65,6 +65,9 @@ IoAttachVpb(PDEVICE_OBJECT DeviceObject)
 }
 
 
+/*
+ * @implemented
+ */
 NTSTATUS STDCALL
 NtQueryVolumeInformationFile(IN HANDLE FileHandle,
                             OUT PIO_STATUS_BLOCK IoStatusBlock,
@@ -139,6 +142,9 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
        return(STATUS_INSUFFICIENT_RESOURCES);
      }
    
+   //trigger FileObject/Event dereferencing
+   Irp->Tail.Overlay.OriginalFileObject = FileObject;
+
    Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
    KeResetEvent( &FileObject->Event );
    Irp->UserEvent = &FileObject->Event;
@@ -186,6 +192,9 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
 }
 
 
+/*
+ * @implemented
+ */
 NTSTATUS STDCALL
 IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
                         IN FS_INFORMATION_CLASS FsInformationClass,
@@ -221,6 +230,9 @@ IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
        ObDereferenceObject(FileObject);
        return(STATUS_INSUFFICIENT_RESOURCES);
      }
+
+   //trigger FileObject/Event dereferencing
+   Irp->Tail.Overlay.OriginalFileObject = FileObject;
    
    Irp->AssociatedIrp.SystemBuffer = FsInformation;
    KeResetEvent( &FileObject->Event );
@@ -261,6 +273,9 @@ IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
 }
 
 
+/*
+ * @implemented
+ */
 NTSTATUS STDCALL
 NtSetVolumeInformationFile(IN HANDLE FileHandle,
                           OUT PIO_STATUS_BLOCK IoStatusBlock,
@@ -272,7 +287,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
    PDEVICE_OBJECT DeviceObject;
    PIRP Irp;
    NTSTATUS Status;
-   PIO_STACK_LOCATION StackPtr;
+   PEXTENDED_IO_STACK_LOCATION StackPtr;
    PVOID SystemBuffer;
    IO_STATUS_BLOCK IoSB;
    
@@ -310,13 +325,16 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
                      FsInformation,
                      Length);
    
+   //trigger FileObject/Event dereferencing
+   Irp->Tail.Overlay.OriginalFileObject = FileObject;
+
    Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
    KeResetEvent( &FileObject->Event );
    Irp->UserEvent = &FileObject->Event;
    Irp->UserIosb = &IoSB;
    Irp->Tail.Overlay.Thread = PsGetCurrentThread();
    
-   StackPtr = IoGetNextIrpStackLocation(Irp);
+   StackPtr = (PEXTENDED_IO_STACK_LOCATION) IoGetNextIrpStackLocation(Irp);
    StackPtr->MajorFunction = IRP_MJ_SET_VOLUME_INFORMATION;
    StackPtr->MinorFunction = 0;
    StackPtr->Flags = 0;
@@ -347,6 +365,9 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
 }
 
 
+/*
+ * @implemented
+ */
 VOID STDCALL
 IoAcquireVpbSpinLock(OUT PKIRQL Irql)
 {
@@ -355,6 +376,9 @@ IoAcquireVpbSpinLock(OUT PKIRQL Irql)
 }
 
 
+/*
+ * @implemented
+ */
 VOID STDCALL
 IoReleaseVpbSpinLock(IN KIRQL Irql)
 {