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

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

Синтаксис

void ExAcquirePushLockExclusive(
   Lock
);

Параметры

Lock

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

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

None

Remarks

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

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

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

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

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

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 10, версия 1809
Верхняя часть wdm.h

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

ExInitializePushLock

KeEnterCriticalRegion

ExReleasePushLockExclusive

ExAcquirePushLockShared