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


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

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

Синтаксис

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

Параметры

[in, out] PushLock

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

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

Никакой.

Замечания

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

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

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

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

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

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

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

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

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

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

Чтобы удалить блокировку push-уведомлений, вызовите FltDeletePushLock.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка fltkernel.h (include Fltkernel.h)
библиотеки FltMgr.lib
IRQL <= APC_LEVEL

См. также

FltAcquirePushLockExclusive ExclusiveEx

FltAcquirePushLockShared

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion