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


Функция FltOplockBreakToNoneEx (fltkernel.h)

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

Синтаксис

FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakToNoneEx(
  [in]           POPLOCK                                 Oplock,
  [in]           PFLT_CALLBACK_DATA                      CallbackData,
  [in]           ULONG                                   Flags,
  [in, optional] PVOID                                   Context,
  [in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE        WaitCompletionRoutine,
  [in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);

Параметры

[in] Oplock

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

[in] CallbackData

Указатель на структуру данных обратного вызова (FLT_CALLBACK_DATA) для операции ввода-вывода.

[in] Flags

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

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Позволяет продолжить работу без блокировки или ожидания операции, вызвавшей разрыв оплока. Обычно этот флаг используется только в том случае, если операция ввода-вывода, представленная данными обратного вызова, на которые указывает параметр callbackData CallbackData, указывает на операцию IRP_MJ_CREATE.

[in, optional] Context

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

[in, optional] WaitCompletionRoutine

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

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

typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

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

CallbackData

Указатель на структуру данных обратного вызова для операции ввода-вывода.

Контекст

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

[in, optional] PrePostCallbackDataRoutine

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

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

typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

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

CallbackData

Указатель на структуру данных обратного вызова для операции ввода-вывода.

Контекст

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

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

FltOplockBreakToNoneEx возвращает один из следующих кодов FLT_PREOP_CALLBACK_STATUS:

Возвращаемый код Описание
FLT_PREOP_COMPLETE
FltOplockBreakToNoneEx возникла ошибка выделения пула или вызов функции FsRtlOplockBreakToNoneEx. FltOplockBreakToNoneEx установит код ошибки в элементе Status структуры IO_STATUS_BLOCK. Структура IO_STATUS_BLOCK указывается в элементе IoStatus структуры данных обратного вызова FLT_CALLBACK_DATA. Параметр CallbackData указывает на этот FLT_CALLBACK_DATA.
FLT_PREOP_PENDING
Была инициирована блокировка, из-за которой диспетчер фильтров опубликовал операцию ввода-вывода в рабочую очередь. Операция ввода-вывода представлена данными обратного вызова, на которые указывает параметр CallbackData.
FLT_PREOP_SUCCESS_WITH_CALLBACK
Данные обратного вызова, которые CallbackData указывает на то, что параметр не был задан, и операция ввода-вывода была выполнена немедленно. Помните, что если вызывающий объект указал OPLOCK_FLAG_COMPLETE_IF_OPLOCKED в параметре Флаги, то разрыв блокировки оплока может выполняться, даже если операция ввода-вывода не была выполнена. Чтобы определить, является ли это ситуацией, вызывающий объект должен проверить наличие STATUS_OPLOCK_BREAK_IN_PROGRESS в элементе состояния структуры IO_STATUS_BLOCK. Структура IO_STATUS_BLOCK указывается в элементе IoStatus структуры данных обратного вызова FLT_CALLBACK_DATA.

Замечания

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

Требования

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

См. также

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakToNoneEx

IO_STATUS_BLOCK