From: Pierre Schweitzer Date: Sun, 12 Nov 2017 21:32:16 +0000 (+0100) Subject: [NTOSKRNL] In NtWriteFile, quit using ObReferenceObjectByHandle in favor of ObReferen... X-Git-Tag: v0.4.7~81 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=c3d5a3f2bdff97f03b802fe95dce9d0c9375e53e [NTOSKRNL] In NtWriteFile, quit using ObReferenceObjectByHandle in favor of ObReferenceFileObjectForWrite(). This avoids RO FSDs being called for write operations. CORE-14003 --- diff --git a/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c index 93f1fe4e5fd..9ab983ac21d 100644 --- a/ntoskrnl/io/iomgr/iofunc.c +++ b/ntoskrnl/io/iomgr/iofunc.c @@ -3499,19 +3499,11 @@ NtWriteFile(IN HANDLE 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 */