Функция 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