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

Подпрограмма FltIsOperationSynchronous определяет, представляет ли данная структура данных обратного вызова (FLT_CALLBACK_DATA) синхронную или асинхронную операцию ввода-вывода.

Синтаксис

BOOLEAN FLTAPI FltIsOperationSynchronous(
  [in] PFLT_CALLBACK_DATA CallbackData
);

Параметры

[in] CallbackData

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

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

FltIsOperationSynchronous возвращает значение TRUE, если операция синхронная, и false, если операция является асинхронной.

Комментарии

FltIsOperationSynchronous определяет, представляет ли данная структура данных обратного вызова (FLT_CALLBACK_DATA) синхронную или асинхронную операцию ввода-вывода в соответствии со следующими условиями:

  • Если операция не является операцией ввода-вывода на основе IRP, операция является синхронной. Чтобы определить, основана ли операция на IRP, используйте макрос FLT_IS_IRP_OPERATION .

  • Если операция является асинхронной операцией ввода-вывода подкачки, операция является асинхронной, даже если выполняется одно из других условий в этом списке.

  • Если операция является синхронной операцией ввода-вывода на разбиение по страницам, операция является синхронной.

  • Если объект файла для операции был открыт для синхронного ввода-вывода, операция является синхронной.

  • Если флаг IRP_SYNCHRONOUS_API установлен в IRP для операции, операция является синхронной. Этот флаг устанавливается для таких операций, как IRP_MJ_QUERY_INFORMATION и IRP_MJ_SET_INFORMATION, которые всегда синхронны, даже если они выполняются в файловом объекте, открытом для асинхронного ввода-вывода.

  • Если ни одно из указанных выше условий не выполняется, операция является асинхронной.

Примечание

FltIsOperationSynchronous также возвращает значение TRUE, если структура данных обратного вызова представляет операцию IRP_MJ_DEVICE_CONTROL, IRP_MJ_INTERNAL_DEVICE_CONTROL или IRP_MJ_FILE_SYSTEM_CONTROL с кодом управления вводом-выводом (IOCTL) или кодом управления файловой системой (FSCTL), который был определен с помощью METHOD_BUFFERED, даже если объект файла был открыт для асинхронного ввода-вывода. Такой запрос, скорее всего, будет выполнен синхронно файловой системой, но это не обязательно верно во всех случаях.

Когда FltIsOperationSynchronous возвращает значение TRUE, это не означает, что операция ввода-вывода синхронизирована. То есть значение TRUE не указывает, что драйвер минифильтра вернул FLT_PREOP_SYNCHRONIZE в подпрограмме обратного вызова перед операцией (PFLT_POST_OPERATION_CALLBACK) для этой операции. Вместо этого FltIsOperationSynchronous возвращает значение TRUE, чтобы указать, что операция ввода-вывода синхронна с точки зрения диспетчера ввода-вывода.

FltIsOperationSynchronous можно вызывать для всех классов операций: быстрых операций ввода-вывода, обратных вызовов фильтра файловой системы (FSFilter) и операций на основе IRP.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
DLL Fltmgr.sys
IRQL Любой уровень

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

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

IoIsOperationSynchronous