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


Функция FsRtlOplockFsctrlEx (ntifs.h)

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

Синтаксис

NTSTATUS FsRtlOplockFsctrlEx(
  [in] POPLOCK Oplock,
  [in] PIRP    Irp,
  [in] ULONG   OpenCount,
  [in] ULONG   Flags
);

Параметры

[in] Oplock

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

[in] Irp

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

[in] OpenCount

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

[in] Flags

Битовая маска для связанных операций блокировки. Файловая система или драйвер фильтра задает биты для указания поведения FsRtlOplockFsctrlEx. Этот параметр имеет следующие параметры:

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

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

FsRtlOplockFsctrlEx возвращает одно из следующих значений NTSTATUS:

Код возврата Описание
STATUS_SUCCESS Для запроса IRP_MJ_CREATE STATUS_SUCCESS указывает, что запрошенная блокировка фильтра была предоставлена. Для операции FSCTL значение STATUS_SUCCESS зависит от кода FSCTL. Дополнительные сведения см. на страницах справочника по кодам FSCTL, перечисленным в следующем разделе Примечаний.
STATUS_CANCELLED Операция ввода-вывода отменена. STATUS_CANCELLED — это код ошибки.
STATUS_INVALID_PARAMETER Код FSCTL для операции ввода-вывода не был одним из допустимых значений, перечисленных в следующем разделе Примечания. STATUS_INVALID_PARAMETER — это код ошибки.
STATUS_OPLOCK_NOT_GRANTED Не удалось предоставить блокировку. STATUS_OPLOCK_NOT_GRANTED — это код ошибки.
STATUS_PENDING Используется только для операций FSCTL. Значение STATUS_PENDING зависит от кода FSCTL. Дополнительные сведения см. на страницах справочника по кодам FSCTL, перечисленным в следующем разделе Примечаний. STATUS_PENDING — это код успешного выполнения.
STATUS_CANNOT_BREAK_OPLOCK Не удалось предоставить новый блокировок. IRP является запросом IRP_MJ_CREATE, и FILE_OPEN_REQUIRING_OPLOCK был указан в параметре параметров создания для операции. STATUS_CANNOT_BREAK_OPLOCK — это код успешного выполнения.

Комментарии

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

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

Если IRP является запросом IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrlEx можно использовать с одним из следующих кодов FSCTL, заданных в IrpSp-Parameters.FileSystemControl.FsControlCode>:

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

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

  • Значение параметра OpenCount должно быть равно 1.
  • Значение параметра DesiredAccess для запроса IRP_MJ_CREATE должно быть FILE_READ_ATTRIBUTES.
  • Значение параметра ShareAccess для запроса IRP_MJ_CREATE должно быть FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.

Если запрос для ожидающего блокировки фильтра предоставлен, FsRtlOplockFsctrlEx возвращает STATUS_SUCCESS. Дополнительные сведения о создании параметров см. в справочной записи для IRP_MJ_CREATE.

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

Требования

Требование Значение
Минимальная версия клиента Подпрограмма FsRtlOplockFsctrlEx доступна начиная с Windows 7.
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

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

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

FltOplockFsctrl

FsRtlInitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL