Skip to content

Commit 8ed8682

Browse files
[NTOS:FSRTL] FsRtlAcquireFileExclusiveCommon: don't return before acquiring a file resource, except special cases (reactos#7273)
Don't return before file object's resource is acquired in FsRtlAcquireFileExclusiveCommon, except some special return cases, when return is required. Based on hpoussin_filter_extra.patch by Herve Poussineau (@hpoussin) with improved comment, which matches the actual behaviour now. This is required by fltmgr.sys driver from Windows XP/Server 2003 to work correctly, so this change fixes asserts/exceptions when releasing the file via FsRtlReleaseFile after acquiring, when using 3rd party filter drivers from several antivirus programs (e. g., Avast Free Antivirus all versions, AVG Antivirus Free 18.8, Avira AntiVir Personal 8.2, Dr. Web Security Space 8.0, Kaspersky Antivirus 2012 etc. etc.). CORE-14157, CORE-14635, CORE-19318
1 parent 4d0a26d commit 8ed8682

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

ntoskrnl/fsrtl/fastio.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1605,7 +1605,13 @@ FsRtlAcquireFileExclusiveCommon(IN PFILE_OBJECT FileObject,
16051605
FilterCallbacks->PostAcquireForSectionSynchronization(&CbData, Status, CompletionContext);
16061606
}
16071607

1608-
return Status;
1608+
/* Return here when the status is based on the synchonization type and write access to the file */
1609+
if (Status == STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ||
1610+
Status == STATUS_FILE_LOCKED_WITH_ONLY_READERS ||
1611+
Status == STATUS_FILE_LOCKED_WITH_WRITERS)
1612+
{
1613+
return Status;
1614+
}
16091615
}
16101616

16111617
FastDispatch = DeviceObject->DriverObject->FastIoDispatch;

0 commit comments

Comments
 (0)