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


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

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

Синтаксис

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

Параметры

[in/out] Resource

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

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

Никакой

Замечания

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