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


Функция FltAcquireResourceExclusive (fltkernel.h)

Подпрограмма FltAcquireResourceExclusive получает указанный ресурс для монопольного доступа вызывающего потока.

Синтаксис

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

Параметры

[in/out] Resource

Указатель на непрозрачную структуру ERESOURCE . Эта структура должна быть выделена вызывающим объектом из невыгребованного пула и инициализирована путем вызова ExInitializeResourceLite или ExReinitializeResourceLite.

Возвращаемое значение

None

Remarks

FltAcquireResourceExclusive получает указанный ресурс для монопольного доступа вызывающего потока.

Следующие обстоятельства определяют, предоставляется ли вызывающему объекту монопольный доступ к данному ресурсу.

  • Если ресурс в настоящее время не принадлежит, монопольный доступ предоставляется немедленно к текущему потоку.

  • Если вызывающий объект уже получил ресурс для монопольного доступа, текущему потоку предоставляется тот же тип доступа рекурсивно.

  • Вызывающие лица, имеющие общий доступ к ресурсу, должны освободить блокировку, а затем повторно получить ее исключительно.

  • Если ресурс в настоящее время принадлежит как монопольный другому потоку или если вызывающий объект имеет только общий доступ к ресурсу, текущий поток переводится в состояние ожидания, пока ресурс не будет получен.

Если каждый из двух потоков удерживает общую блокировку на одном ресурсе и оба пытаются получить блокировку исключительно без снятия общей блокировки, они будут взаимоблокировкой. Это означает, что каждый поток будет ждать, пока другой не отпустит свое общее удержание на блокировке, и ни один из них не отпустит свое общее удержание до тех пор, пока другой не сделает это.

FltAcquireResourceExclusive — это оболочка для ExAcquireResourceExclusiveLite , которая отключает обычную доставку APC ядра.

Так как FltAcquireResourceExclusive отключает обычную доставку APC ядра, нет необходимости вызывать KeEnterCriticalRegion или FsRtlEnterFileSystem перед вызовом FltAcquireResourceExclusive.

Чтобы освободить ресурс после его получения, вызовите FltReleaseResource. Каждый успешный вызов FltAcquireResourceExclusive должен соответствовать последующему вызову FltReleaseResource.

Чтобы получить ресурс для общего доступа, вызовите FltAcquireResourceShared.

Чтобы удалить ресурс из списка ресурсов системы, вызовите ExDeleteResourceLite.

Чтобы инициализировать ресурс для повторного использования, вызовите ExReinitializeResourceLite.

Дополнительные сведения о структурах ERESOURCE см. в статье Общие сведения о процедурах ERESOURCE.

Требования

Требование Значение
Минимальная версия клиента Windows XP с пакетом обновления 2 (SP2)
Минимальная версия сервера Windows Server 2003 с пакетом обновления 1 (SP1)
Верхняя часть fltkernel.h
Библиотека FltMgr.lib
IRQL IRQL <= APC_LEVEL