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

Подпрограмма FsRtlOplockBreakToNoneEx немедленно прерывает все оппортунистические блокировки (oplocks) без учета клавиши oplock.

Синтаксис

NTSTATUS FsRtlOplockBreakToNoneEx(
  [in, out]      POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [in]           ULONG                         Flags,
  [in, optional] PVOID                         Context,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
  [in, optional] POPLOCK_FS_PREPOST_IRP        PostIrpRoutine
);

Параметры

[in, out] Oplock

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

[in] Irp

Указатель на IRP для операции ввода-вывода.

[in] Flags

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

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Указывает, чтобы прерывание блокировки продолжалось без блокировки или ожидания операции, вызвавшей прерывание операции. Как правило, этот флаг используется только в том случае, если IRP, на который указывает параметр IRP , объявляет IRP_MJ_CREATE операцию.

[in, optional] Context

Указатель на определяемые вызывающим объектом контекстные сведения, передаваемые подпрограммам обратного вызова, на которые указывают параметры CompletionRoutine и PostIrpRoutine .

[in, optional] CompletionRoutine

Указатель на подпрограмму обратного вызова, предоставляемую вызывающим абонентом. Если выполняется прерывание блокировки, эта подпрограмма вызывается по завершении перерыва. Этот параметр является необязательным и может иметь значение NULL. Если значение равно NULL, вызывающий объект переводится в состояние ожидания, пока не завершится прерывание блокировки.

Эта подпрограмма объявляется следующим образом:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

Эта подпрограмма имеет следующие параметры:

Контекст

Указатель сведений о контексте, переданный в параметре Context в FsRtlOplockBreakToNoneEx.

Irp

Указатель на IRP для операции ввода-вывода.

[in, optional] PostIrpRoutine

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

Эта подпрограмма объявляется следующим образом:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

Контекст

Указатель сведений о контексте, переданный в параметре Context в FsRtlOplockBreakToNoneEx.

Irp

Указатель на IRP для операции ввода-вывода.

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

FsRtlOplockBreakToNoneEx возвращает STATUS_SUCCESS или соответствующий код NTSTATUS, например один из следующих:

Код возврата Описание
STATUS_CANCELLED
IRP была отменена. STATUS_CANCELLED — это код ошибки.
STATUS_PENDING
В настоящее время идет перерыв. Таким образом, IRP был положен. STATUS_PENDING — это код успешного выполнения.
STATUS_OPLOCK_BREAK_IN_PROGRESS
Выполняется оппортунистический разрыв блокировки (oplock). STATUS_OPLOCK_BREAK_IN_PROGRESS — это код успешного выполнения, который FsRtlOplockBreakToNoneEx возвращает, если набор вызывающих OPLOCK_FLAG_COMPLETE_IF_OPLOCKED в параметре Flags и необходимо нарушить блокировку.

Комментарии

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

Минифильтры должны вызывать FltOplockBreakToNoneEx вместо FsRtlOplockBreakToNoneEx.

Требования

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

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

FltOplockBreakToNoneEx

FsRtlInitializeOplock