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


Макрос ExTryAcquirePushLockExclusive (wdm.h)

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

Синтаксис

BOOLEAN ExTryAcquirePushLockExclusive(
   Lock
);

Параметры

Lock

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

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

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

Замечания

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

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

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

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

Перед вызовом этой процедуры драйвер должен отключить обычную доставку APC ядра путем вызова KeEnterCriticalRegion. Повторная доставка после освобождения принудительной блокировки путем вызова KeLeaveCriticalRegion. Дополнительные сведения см. в разделе Отключение API.

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

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

Требования

Требование Ценность
Заголовок wdm.h (include Wdm.h)

См. также

ExTryAcquirePushLockShared

ExInitializePushLock

KeEnterCriticalRegion

ExReleasePushLockExclusive

ExAcquirePushLockShared