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

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

Синтаксис

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

Параметры

[in] Oplock

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

[in] Irp

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

[in] OpenCount

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

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

FsRtlOplockFsctrl возвращает одно из следующих значений 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 — это код успешного выполнения.

Комментарии

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

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

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

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

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

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

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

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

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть 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_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltOplockFsctrl

FsRtlCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL