Функция 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. Параметр Flags имеет следующие параметры:

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, вызывающий объект переводится в состояние ожидания, пока не завершится разрыв блокировки.

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

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

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

Контекст

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

Irp

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

[in, optional] PostIrpRoutine

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

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

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

Контекст

Указатель контекстной информации, переданный в параметре Context в 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 (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

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

FltOplockBreakH

FsRtlInitializeOplock