[NTOSKRNL] In NtWriteFile, quit using ObReferenceObjectByHandle in favor of ObReferenceFileObjectForWrite().

This avoids RO FSDs being called for write operations.
CORE-14003
This commit is contained in:
Pierre Schweitzer 2017-11-12 22:32:16 +01:00
parent 3b64f7f8fb
commit c3d5a3f2bd
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B

View file

@ -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 */