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

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

Синтаксис

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

Параметры

[in, out] PushLock

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

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

Нет.

Remarks

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

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

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

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

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

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

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

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

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

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

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

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

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
IRQL <= APC_LEVEL

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

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion