Функция FltAcquirePushLockExclusive (fltkernel.h)
Макрос FltAcquirePushLockExclusive получает заданную принудительную блокировку для монопольного доступа вызывающего потока.
Синтаксис
VOID FLTAPI FltAcquirePushLockExclusive(
[in, out] PEX_PUSH_LOCK PushLock
);
Параметры
[in, out] PushLock
Непрозрачный указатель принудительной блокировки типа PEX_PUSH_LOCK. Этот указатель должен быть инициализирован предыдущим вызовом Метода FltInitializePushLock.
Возвращаемое значение
Нет.
Remarks
FltAcquirePushLockExclusive получает заданную push-блокировку для монопольного доступа вызывающего потока.
Push-блокировки похожи на структуры ERESOURCE (также называемые ресурсами) тем, что их можно получить для общего или монопольного доступа. Дополнительные сведения о принудительной блокировке см. в справочной записи для FltInitializePushLock.
В отличие от структур ERESOURCE, принудительная блокировка не может быть получена рекурсивно. Если вызывающий объект уже получил push-блокировку для монопольного или общего доступа, поток зависнет.
Когда вызывающему объекту будет предоставлен монопольный доступ к заданной принудительной блокировке, зависит от следующего:
Если принудительная блокировка в настоящее время отсутствует, монопольный доступ предоставляется немедленно к текущему потоку.
Если принудительная блокировка уже была приобретена для монопольного или общего доступа другим потоком, текущий поток переводится в состояние ожидания, пока не будет получена блокировка push-уведомлений.
Так как FltAcquirePushLockExclusive отключает обычную доставку APC ядра, нет необходимости вызывать KeEnterCriticalRegion или FsRtlEnterFileSystem перед вызовом FltAcquirePushLockExclusive.
Чтобы освободить push-блокировку после ее получения, вызовите FltReleasePushLock. Каждый вызов FltAcquirePushLockExclusive должен соответствовать последующему вызову FltReleasePushLock.
Чтобы получить push-блокировку для общего доступа, вызовите FltAcquirePushLockShared.
Чтобы инициализировать push-блокировку, вызовите FltInitializePushLock.
Чтобы удалить принудительная блокировка, вызовите FltDeletePushLock.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | FltMgr.lib |
IRQL | <= APC_LEVEL |