Макрос ExAcquirePushLockShared (wdm.h)
Получает указанную блокировку принудительной отправки для общего доступа вызывающим потоком.
Синтаксис
void ExAcquirePushLockShared(
Lock
);
Параметры
Lock
Непрозрачный указатель блокировки принудительной блокировки. Этот указатель должен быть инициализирован предыдущим вызовом ExInitializePushLock.
Возвращаемое значение
Никакой
Замечания
Блокировки push-уведомлений похожи на структуры ERESOURCE (также называемые ресурсами), в том, что они могут быть приобретены для общего или эксклюзивного доступа. Дополнительные сведения о push-блокировках см. в справочной записи для ExInitializePushLock.
В отличие от структур ERESOURCE, блокировки push-уведомлений нельзя получить рекурсивно. Если вызывающий объект уже приобрел блокировку принудительной передачи для эксклюзивного доступа, система зависнет. Если вызывающий объект уже приобрел блокировку push-уведомлений для общего доступа, он может снова получить общий доступ.
Чтобы освободить блокировку push-уведомлений после получения, вызовите ExReleasePushLockShared. Каждый вызов ExAcquirePushLockShared должен соответствовать последующему вызову ExReleasePushLockShared.
Когда вызывающий объект получит общий доступ к заданной блокировке push-уведомлений, зависит от следующего:
Если блокировка принудительной передачи в настоящее время не защищена, общий доступ предоставляется немедленно текущему потоку.
Если блокировка push-уведомлений уже была приобретена для общего доступа другим потоком, и поток не ожидает монопольного доступа к принудительной блокировке, общий доступ предоставляется вызывающему объекту немедленно. Вызывающий объект помещается в состояние ожидания, если есть эксклюзивный официант.
Если блокировка принудительной передачи уже была приобретена для монопольного доступа другим потоком или если существует другой поток, ожидающий монопольного доступа, текущий поток помещается в состояние ожидания до тех пор, пока блокировка принудительной передачи не будет получена.
Перед вызовом этой процедуры драйвер должен отключить обычную доставку APC ядра путем вызова KeEnterCriticalRegion. Повторная доставка после освобождения принудительной блокировки путем вызова KeLeaveCriticalRegion. Дополнительные сведения см. в разделе Отключение API.
Чтобы получить блокировку принудительной отправки для эксклюзивного доступа, вызовите ExAcquirePushLockExclusive.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 10 версии 1809 |
заголовка | wdm.h |