Функция 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
Указатель на сведения о контексте, определяемые вызывающим объектом, которые необходимо передать в подпрограммы обратного вызова, на которые указываются параметры
[in, optional] CompletionRoutine
Указатель на подпрограмму обратного вызова, предоставленного вызывающим абонентом. Если выполняется разрыв оплока, эта подпрограмма вызывается при завершении перерыва. Этот параметр является необязательным и может быть null. Если значение NULL, вызывающий объект помещается в состояние ожидания до завершения останова oplock.
Эта подпрограмма объявлена следующим образом:
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
IN PVOID Context,
IN PIRP Irp
);
Эта подпрограмма имеет следующие параметры:
Контекст
Указатель сведений о контексте, переданный в параметр
Irp
Указатель на IRP для операции ввода-вывода.
[in, optional] PostIrpRoutine
Указатель на подпрограмму обратного вызова вызываемого абонента, который должен вызываться, если операция ввода-вывода должна быть выполнена. Подпрограмма вызывается перед тем, как пакет oplock задается IRP. Этот параметр является необязательным и может быть null.
Эта подпрограмма объявлена следующим образом:
typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
IN PVOID Context,
IN PIRP Irp
);
Контекст
Указатель сведений о контексте, переданный в параметр
Irp
Указатель на IRP для операции ввода-вывода.
Возвращаемое значение
FsRtlOplockBreakH возвращает STATUS_SUCCESS или соответствующий код NTSTATUS, например один из следующих:
Возвращаемый код | Описание |
---|---|
|
IRP был отменен. STATUS_CANCELLED — это код ошибки. |
|
IRP был размещен в рабочей очереди. STATUS_PENDING — это код успешного выполнения. |
|
Не удается выполнить разрыв оппортунистической блокировки (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 |