Функция 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 | Любой уровень |