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


Функция FltAcquirePushLockShared (fltkernel.h)

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

Синтаксис

VOID FLTAPI FltAcquirePushLockShared(
  [in, out] PEX_PUSH_LOCK PushLock
);

Параметры

[in, out] PushLock

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

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

Никакой.

Замечания

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

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

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

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

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

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

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

Так как FltAcquirePushLockShared отключает обычную доставку APC ядра, перед вызовом KeEnterCriticalRegion или FsRtlEnterFileSystem перед вызовом FltAcquirePushLockShared.

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

Чтобы получить блокировку принудительной отправки для эксклюзивного доступа, вызовите FltAcquirePushLockExclusive.

Чтобы инициализировать блокировку push-уведомлений, вызовите FltInitializePushLock.

Чтобы удалить блокировку push-уведомлений, вызовите FltDeletePushLock.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка fltkernel.h (include Fltkernel.h)
библиотеки FltMgr.lib
IRQL <= APC_LEVEL

См. также

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion