update for HEAD-2003091401
[reactos.git] / ntoskrnl / io / rw.c
index 8ffe9ee..9ef8191 100644 (file)
@@ -33,6 +33,7 @@
  *
  * REVISIONS
  *
+ * @implemented
  */
 NTSTATUS STDCALL NtReadFile(HANDLE                     FileHandle,
                            HANDLE                      EventHandle,
@@ -85,6 +86,7 @@ NTSTATUS STDCALL NtReadFile(HANDLE                    FileHandle,
          ObDereferenceObject(FileObject);
          return(Status);
        }
+
     }
   else 
     {
@@ -108,6 +110,9 @@ NTSTATUS STDCALL NtReadFile(HANDLE                  FileHandle,
                                     ByteOffset,
                                     Event,
                                     IoStatusBlock);
+
+   //trigger FileObject/Event dereferencing
+   Irp->Tail.Overlay.OriginalFileObject = FileObject;
   
   Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
   Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
@@ -123,6 +128,7 @@ NTSTATUS STDCALL NtReadFile(HANDLE                  FileHandle,
       StackPtr->Parameters.Read.Key = 0;
     }
   
+
   Status = IoCallDriver(FileObject->DeviceObject, Irp);
   if (Status == STATUS_PENDING && FileObject->Flags & FO_SYNCHRONOUS_IO)
      {
@@ -147,9 +153,11 @@ NTSTATUS STDCALL NtReadFile(HANDLE                 FileHandle,
           /* Wait failed. */
           return(Status);
         }
+
        Status = Iosb.Status;
        return(Status);
      }
+
   if (FileObject->Flags & FO_SYNCHRONOUS_IO)
     {
       *UserIoStatusBlock = Iosb;
@@ -170,6 +178,7 @@ NTSTATUS STDCALL NtReadFile(HANDLE                  FileHandle,
  *
  * REVISIONS
  *
+ * @implemented
  */
 NTSTATUS STDCALL NtWriteFile(HANDLE                    FileHandle,
                             HANDLE                     EventHandle,
@@ -188,7 +197,7 @@ NTSTATUS STDCALL NtWriteFile(HANDLE                 FileHandle,
   PKEVENT Event = NULL;
   IO_STATUS_BLOCK Iosb;
   PIO_STATUS_BLOCK IoStatusBlock;
-  
+
   DPRINT("NtWriteFile(FileHandle %x Buffer %x Length %x ByteOffset %x, "
         "IoStatusBlock %x)\n", FileHandle, Buffer, Length, ByteOffset,
         IoStatusBlock);
@@ -222,6 +231,7 @@ NTSTATUS STDCALL NtWriteFile(HANDLE                 FileHandle,
          ObDereferenceObject(FileObject);
          return(Status);
        }
+
     }
   else 
     {
@@ -246,6 +256,9 @@ NTSTATUS STDCALL NtWriteFile(HANDLE                 FileHandle,
                                     Event,
                                     IoStatusBlock);
   
+   //trigger FileObject/Event dereferencing
+   Irp->Tail.Overlay.OriginalFileObject = FileObject;
+
   Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
   Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
   
@@ -259,7 +272,7 @@ NTSTATUS STDCALL NtWriteFile(HANDLE                 FileHandle,
     {
       StackPtr->Parameters.Write.Key = 0;
     }
-  
+
   Status = IoCallDriver(FileObject->DeviceObject, Irp);
   if (Status == STATUS_PENDING && FileObject->Flags & FO_SYNCHRONOUS_IO)
      {
@@ -284,9 +297,11 @@ NTSTATUS STDCALL NtWriteFile(HANDLE                        FileHandle,
           /* Wait failed. */
           return(Status);
         }
+
        Status = Iosb.Status;
        return(Status);
      }
+
   if (FileObject->Flags & FO_SYNCHRONOUS_IO)
     {
       *UserIoStatusBlock = Iosb;
@@ -306,7 +321,6 @@ NTSTATUS STDCALL NtWriteFile(HANDLE                 FileHandle,
  * RETURN VALUE
  *
  * REVISIONS
- *
  */
 NTSTATUS
 STDCALL
@@ -337,7 +351,6 @@ NtReadFileScatter (
  * RETURN VALUE
  *
  * REVISIONS
- *
  */
 NTSTATUS
 STDCALL