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


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

Подпрограмма FltOplockFsctrlEx выполняет различные оппортунистические операции блокировки (oplock) от имени драйвера минифильтра.

Синтаксис

FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockFsctrlEx(
  [in] POPLOCK            Oplock,
  [in] PFLT_CALLBACK_DATA CallbackData,
  [in] ULONG              OpenCount,
  [in] ULONG              Flags
);

Параметры

[in] Oplock

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

[in] CallbackData

Указатель на структуру FLT_CALLBACK_DATA для операции ввода-вывода. Этот параметр является обязательным и не может иметь значение NULL.

[in] OpenCount

Количество пользовательских дескрипторов для файла, если запрашивается монопольная блокировка. Задание ненулевого значения для запроса на блокировку уровня 2, R или RH означает, что в файле есть блокировки диапазона байтов. Сведения о типах oplock см. в разделе Обзор Oplock.

[in] Flags

Битовая маска для связанных операций oplock. Драйвер минифильтра задает биты, чтобы указать поведение FltOplockFsctrlEx. Параметр Flags имеет следующие параметры:

Значение Значение
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) Файловая система проверила соответствие всех ключей oplock на всех открытых в данный момент дескрипторов. Указав этот флаг, вы разрешаете пакету oplock предоставлять блокировку уровня RW или RWH, если существует несколько открытых дескрипторов для файла. Дополнительные сведения о типах oplock см. в разделе Обзор Oplock.

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

FltOplockFsctrlEx возвращает FLT_PREOP_PENDING для некоторых операций FSCTL. Дополнительные сведения см. на справочных страницах для кодов FSCTL, перечисленных в следующем разделе Примечаний. В противном случае Функция FltOplockFsctrlEx возвращает FLT_PREOP_COMPLETE.

Комментарии

Драйвер минифильтра вызывает FltOplockFsctrlEx для выполнения различных оппортунистических операций блокировки для операции создания или операции ввода-вывода управления файловой системой.

Структура FLT_CALLBACK_DATA , на которую указывает параметр CallbackData , должна представлять операцию IRP_MJ_FILE_SYSTEM_CONTROL или IRP_MJ_CREATE на основе IRP .

Если операция является IRP_MJ_FILE_SYSTEM_CONTROL операцией, FltOplockFsctrlEx можно использовать со следующими кодами FSCTL:

Код FSCTL задается в элементе FsControlCodeструктуры FLT_PARAMETERS для операции. Дополнительные сведения о FsControlCode и других параметрах IRP_MJ_FILE_SYSTEM_CONTROL см. в разделе FLT_PARAMETERS для IRP_MJ_FILE_SYSTEM_CONTROL.

Дополнительные сведения об оппортунистических блокировках см. в документации по Microsoft Windows SDK.

Если операция является запросом IRP_MJ_CREATE , fltOplockFsctrl можно использовать для запроса ожидающей блокировки фильтра, если выполняются все следующие условия:

  • Значение параметра OpenCount должно быть равно 1.
  • Значение параметра DesiredAccess для запроса IRP_MJ_CREATE равно FILE_READ_ATTRIBUTES. Этот параметр задается в элементе SecurityContext структуры FLT_PARAMETERS для операции. Дополнительные сведения см. в разделе FLT_PARAMETERS для IRP_MJ_CREATE.
  • Значение параметра ShareAccess для операции IRP_MJ_CREATE равно FILE_SHARE_READ, FILE_SHARE_WRITE или FILE_SHARE_DELETE. Этот параметр задается в элементе ShareAccess структуры FLT_PARAMETERS для операции. Дополнительные сведения см. в разделе FLT_PARAMETERS для IRP_MJ_CREATE.

Фильтры и файловые системы, вызывающие эту функцию, должны синхронизировать вызовы с предоставленным системой пакетом oplock. Дополнительные сведения см. в разделе Синхронизация Oplock .

Требования

Требование Значение
Минимальная версия клиента Эта подпрограмма доступна, начиная с Windows 8.
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

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

FLT_CALLBACK_DATA

FLT_PARAMETERS для IRP_MJ_CREATE

FLT_PARAMETERS для IRP_MJ_FILE_SYSTEM_CONTROL

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplockEx

FltInitializeOplock

FsRtlOplockFsctrlEx

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL