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

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

Синтаксис

VOID FLTAPI FltAcquirePushLockExclusive(
  [in, out] PEX_PUSH_LOCK PushLock
);

Параметры

[in, out] PushLock

Непрозрачный указатель принудительной блокировки типа PEX_PUSH_LOCK. Этот указатель должен быть инициализирован предыдущим вызовом Метода FltInitializePushLock.

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

Нет.

Remarks

FltAcquirePushLockExclusive получает заданную push-блокировку для монопольного доступа вызывающего потока.

Push-блокировки похожи на структуры ERESOURCE (также называемые ресурсами) тем, что их можно получить для общего или монопольного доступа. Дополнительные сведения о принудительной блокировке см. в справочной записи для FltInitializePushLock.

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

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

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

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

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

Чтобы освободить push-блокировку после ее получения, вызовите FltReleasePushLock. Каждый вызов FltAcquirePushLockExclusive должен соответствовать последующему вызову FltReleasePushLock.

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

Чтобы инициализировать push-блокировку, вызовите FltInitializePushLock.

Чтобы удалить принудительная блокировка, вызовите FltDeletePushLock.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
IRQL <= APC_LEVEL

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

FltAcquirePushLockExclusiveEx

FltAcquirePushLockShared

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion