[NTOSKRNL] In NtWriteFile, quit using ObReferenceObjectByHandle in favor of ObReferen...
authorPierre Schweitzer <pierre@reactos.org>
Sun, 12 Nov 2017 21:32:16 +0000 (22:32 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 12 Nov 2017 21:39:40 +0000 (22:39 +0100)
This avoids RO FSDs being called for write operations.
CORE-14003

ntoskrnl/io/iomgr/iofunc.c

index 93f1fe4..9ab983a 100644 (file)
@@ -3499,19 +3499,11 @@ NtWriteFile(IN HANDLE FileHandle,
     CapturedByteOffset.QuadPart = 0;
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
 
     CapturedByteOffset.QuadPart = 0;
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
 
-    /* Get File Object
-     * FIXME: We should call ObReferenceFileObjectForWrite() instead to
-     * check whether write access was actually granted. If not it will
-     * fail and we will return.
-     * That would allow avoiding ASSERT on FastIO later on if the FSD
-     * is read-only
-     */
-    Status = ObReferenceObjectByHandle(FileHandle,
-                                       0,
-                                       IoFileObjectType,
-                                       PreviousMode,
-                                       (PVOID*)&FileObject,
-                                       &ObjectHandleInfo);
+    /* Get File Object for write */
+    Status = ObReferenceFileObjectForWrite(FileHandle,
+                                           PreviousMode,
+                                           &FileObject,
+                                           &ObjectHandleInfo);
     if (!NT_SUCCESS(Status)) return Status;
 
     /* Validate User-Mode Buffers */
     if (!NT_SUCCESS(Status)) return Status;
 
     /* Validate User-Mode Buffers */