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