Поделиться через


Функция 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

См. также раздел

ExAcquireFastMutex

ExAcquireResourceExclusive

ExAcquireResourceExclusiveLite

ExAcquireResourceShared

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExAcquireSharedStarveExclusive

ExReleaseResource

ExReleaseResourceLite

ExTryToAcquireFastMutex

FltAcquireResourceExclusive

FltAcquireResourceShared

FltReleaseResource

FsRtlEnterFileSystem

IoCallDriver

KeLeaveCriticalRegion

KeRaiseIrqlToDpcLevel