Функция 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, например один из следующих:
Код возврата | Описание |
---|---|
|
IRP была отменена. STATUS_CANCELLED — это код ошибки. |
|
В настоящее время идет перерыв. Таким образом, IRP был положен. STATUS_PENDING — это код успешного выполнения. |
|
Выполняется оппортунистический разрыв блокировки (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 |