Функция FltInitializePushLock (fltkernel.h)
Подпрограмма FltInitializePushLock инициализирует переменную push-блокировки.
Синтаксис
VOID FLTAPI FltInitializePushLock(
[out] PEX_PUSH_LOCK PushLock
);
Параметры
[out] PushLock
Указатель на хранилище, предоставленное вызывающей стороной, которое должно быть по крайней мере значением sizeof(EX_PUSH_LOCK) для инициализации переменной push lock. Хранилище должно быть выровнено по 4 байтам на 32-разрядных платформах и 8-байтово для 64-разрядных платформ.
Возвращаемое значение
None
Remarks
Принудительная блокировка редко подходит для минифильтров файловой системы. Как описано ниже, некоторые из их характеристик могут быть несовместимы с характером повторного входа файловых систем.
Принудительные блокировки похожи на структуры ERESOURCE (также называемые "ресурсами") следующими способами:
- Принудительные блокировки можно использовать для синхронизации набором потоков.
- Push-блокировки можно получить для общего или монопольного доступа.
- Хотя вызывающий объект предоставляет хранилище для переменной push-блокировки, структура EX_PUSH_LOCK непрозрачна: то есть ее члены зарезервированы для использования системой.
- Алгоритм предоставления монопольного доступа не является справедливым для всех потоков. Если существует высокий уровень состязания за монопольную блокировку, нет никакой гарантии в порядке, в котором потоки будут предоставляться монопольный доступ.
- Процедуры поддержки для определения текущего владельца принудительной блокировки во время выполнения отсутствуют. (Пользователи структур ERESOURCE могут вызывать подпрограммы, такие как ExIsResourceAcquiredExclusiveLite , чтобы определить, имеет ли текущий поток монопольный доступ к ресурсу.)
-
По этой же причине отсутствуют расширения поддержки для определения текущего владельца принудительной блокировки во время отладки и диагностики взаимоблокировок. (Пользователи структур ERESOURCE могут использовать
!locks
расширение в kd или windbg, чтобы узнать это.) - Отсутствует поддержка средства проверки драйверов, помогающего в ранней диагностике взаимоблокировок с помощью push-блокировок.
- Монопольные принудительные блокировки невозможно получить рекурсивно.
- Когда принудительная блокировка в основном используется для общего доступа, они более эффективны, чем структуры ERESOURCE.
- Хранилище для принудительной блокировки может быть выделено из страничного или невыгружаемого пула. Структуры ERESOURCE должны быть выделены только из пула без паг.
- EX_PUSH_LOCK структуры гораздо меньше структур ERESOURCE.
Чтобы получить push-блокировку для монопольного доступа, вызовите Метод FltAcquirePushLockExclusive.
Чтобы получить push-блокировку для общего доступа, вызовите FltAcquirePushLockShared.
Чтобы освободить push-блокировку, вызовите FltReleasePushLock.
Чтобы удалить push-блокировку, вызовите FltDeletePushLock.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Эта подпрограмма доступна в Microsoft Windows XP с пакетом обновления 2 (SP2), Microsoft Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних версиях. |
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по