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


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

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

Синтаксис

void ExAcquirePushLockShared(
   Lock
);

Параметры

Lock

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

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

None

Remarks

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

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

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

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

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

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

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

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

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

Требования

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

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

ExInitializePushLock

KeEnterCriticalRegion

ExReleasePushLockShared

ExAcquirePushLockExclusive