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


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

FsRtlOplockBreakH прерывает CACHE_HANDLE_LEVEL оппортунистические блокировки (oplocks).

Синтаксис

NTSTATUS FsRtlOplockBreakH(
  [in]           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] Oplock

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

[in] Irp

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

[in] Flags

Битовая маска для связанной операции ввода-вывода файла. Файловая система или драйвер фильтра задает биты, чтобы указать поведение FsRtlOplockBreakH. Параметр флагов имеет следующие параметры:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

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

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

Поддерживается в Windows 7 и более поздних версиях.

Указывает, чтобы разрешить CACHE_HANDLE_LEVEL разрывы оплока продолжаться независимо от ключа oplock.

[in, optional] Context

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

[in, optional] CompletionRoutine

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

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

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

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

Контекст

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

Irp

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

[in, optional] PostIrpRoutine

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

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

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

Контекст

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

Irp

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

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

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

Возвращаемый код Описание
STATUS_CANCELLED
IRP был отменен. STATUS_CANCELLED — это код ошибки.
STATUS_PENDING
IRP был размещен в рабочей очереди. STATUS_PENDING — это код успешного выполнения.
STATUS_CANNOT_BREAK_OPLOCK
Не удается выполнить разрыв оппортунистической блокировки (oplock). IRP — это запрос IRP_MJ_CREATE. FILE_OPEN_REQUIRING_OPLOCK был указан в параметре параметров создания для операции, и существует предоставленная оплока. STATUS_CANNOT_BREAK_OPLOCK — это код ошибки.

Замечания

Если операция должна прерывать CACHE_HANDLE_LEVEL блокировок, операция вызывает FsRtlOplockBreakH.

Если вызывающий элемент указывает флаг OPLOCK_FLAG_IGNORE_OPLOCK_KEYS в параметре Flags, FsRtlOplockBreakH разрывает все CACHE_HANDLE_LEVEL блокировок, независимо от ключа oplock. Поведение по умолчанию FsRtlOplockBreakH заключается в разрыве оплоков, ключи которых не соответствуют ключу объекта файла вызывающего объекта.

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Подпрограмма FsRtlOplockBreakH доступна начиная с Windows 7.
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

FltOplockBreakH

FsRtlInitializeOplock