diff --git a/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c index c344b422d8a..f3ad7164c2a 100644 --- a/ntoskrnl/io/iomgr/iofunc.c +++ b/ntoskrnl/io/iomgr/iofunc.c @@ -3656,9 +3656,15 @@ NtWriteFile(IN HANDLE FileHandle, if ((DeviceObject->SectorSize != 0) && (ByteOffset->QuadPart % DeviceObject->SectorSize != 0)) { - /* Release the file object and and fail */ - ObDereferenceObject(FileObject); - return STATUS_INVALID_PARAMETER; + /* Only if that's not specific values for synchronous IO */ + if ((ByteOffset->QuadPart != FILE_WRITE_TO_END_OF_FILE) && + (ByteOffset->QuadPart != FILE_USE_FILE_POINTER_POSITION || + !BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO))) + { + /* Release the file object and and fail */ + ObDereferenceObject(FileObject); + return STATUS_INVALID_PARAMETER; + } } } }