Функция FsRtlEnterFileSystem
Макрос FsRtlEnterFileSystem временно отключает доставку обычных вызовов асинхронных процедур (APC) в режиме ядра. Специальные APC в режиме ядра по-прежнему доставляются.
Синтаксис
VOID FsRtlEnterFileSystem(
VOID
);
Параметры
None
Возвращаемое значение
Эта функция не возвращает значение.
Комментарии
Каждая подпрограмма точки входа драйвера файловой системы должна вызывать FsRtlEnterFileSystem непосредственно перед получением ресурса, необходимого для выполнения запроса ввода-вывода файла, и сразу же после этого вызвать FsRtlExitFileSystem . Это гарантирует, что подпрограмма не может быть приостановлена во время выполнения и, таким образом, блокирует другие запросы файлового ввода-вывода.
Каждый успешный вызов FsRtlEnterFileSystem должен соответствовать последующему вызову FsRtlExitFileSystem.
Драйверы фильтров файловой системы могут отключать доставку обычных APC ядра, вызывая FsRtlEnterFileSystem или KeEnterCriticalRegion до IoCallDriver , только если FsRtlExitFileSystem или KeLeaveCriticalRegion находится в той же процедуре диспетчеризации. Они не должны вызывать FsRtlEnterFileSystem или KeEnterCriticalRegion до IoCallDriver , а затем вызывать FsRtlExitFileSystem или KeLeaveCriticalRegion в процедуре завершения IRP. Средство проверки драйверов имеет правило, которое помогает перехватывать это условие.
Драйверы фильтров файловой системы должны отключать обычные APC ядра перед получением какого-либо ресурса. Драйверы фильтров файловой системы получают ресурсы со следующими подпрограммами:
- ExAcquireResourceExclusive
- ExAcquireResourceExclusiveLite
- ExAcquireResourceShared
- ExAcquireResourceSharedLite
- ExAcquireSharedStarveExclusive
- ExAcquireSharedWaitForExclusive
В качестве альтернативы FsRtlEnterFileSystem драйверы минифильтра могут использовать подпрограммы FltAcquireResourceExclusive, FltAcquireResourceShared и FltReleaseResource , которые правильно обрабатывают APC при получении и освобождении ресурса.
Требования
Тип требования | Требование |
---|---|
Заголовок | Ntifs.h (включая Ntifs.h) |
IRQL | <= APC_LEVEL |
См. также раздел
ExAcquireResourceExclusiveLite
ExAcquireSharedWaitForExclusive