Функция FltReissueSynchronousIo (fltkernel.h)
FltReissueSynchronousIo инициирует новую синхронную операцию ввода-вывода, которая использует параметры синхронизированной операции ввода-вывода.
Синтаксис
VOID FLTAPI FltReissueSynchronousIo(
[in] PFLT_INSTANCE InitiatingInstance,
[in] PFLT_CALLBACK_DATA CallbackData
);
Параметры
[in] InitiatingInstance
Непрозрачный указатель экземпляра на экземпляр драйвера мини-фильтра, который повторно выдается для операции ввода-вывода. Должен быть тем же экземпляром, который инициировал предыдущую операцию ввода-вывода. Этот параметр является обязательным и не может иметь значение NULL.
[in] CallbackData
Указатель на структуру данных обратного вызова (FLT_CALLBACK_DATA) из ранее синхронизированной операции ввода-вывода. Этот параметр является обязательным и не может иметь значение NULL.
Возвращаемое значение
None
Remarks
Драйвер минифильтра вызывает FltReissueSynchronousIo из подпрограммы обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK) для повторной отправки синхронизированного запроса ввода-вывода. Обычно он вызывает FltReissueSynchronousIo из подпрограммы обратного вызова после операции, чтобы повторно выполнить неудачную операцию с другими параметрами или для обработки отказов повторного преобразования. Однако он также может вызвать FltReissueSynchronousIo для повторного ввода-вывода, созданного драйвером минифильтра с помощью вызовов процедур FltAllocateCallbackData и FltPerformSynchronousIo . В этой ситуации не имеет значения, вызывает ли он FltReissueSynchronousIo в подпрограмме обратного вызова после операции или вне контекста процедуры обратного вызова операции. Для вызовов вне контекста подпрограммы обратного вызова после операции рекомендуется использовать процедуры FltReuseCallbackData и FltPerformSynchronousIo .
Вызывающий объект может изменить содержимое блока параметров ввода-вывода структуры данных обратного вызова (FLT_CALLBACK_DATA) перед повторной отправкой запроса ввода-вывода. Если это так, он должен вызвать FltSetCallbackDataDirty перед вызовом FltReissueSynchronousIo.
Например, если драйвер минифильтра использует точки повторного анализа и его подпрограмма обратного вызова после создания вызывается для операции создания, возвращающей STATUS_REPARSE, драйвер минифильтра может повторно выдать операцию создания для собственных точек повторного анализа. В этом случае драйвер мини-фильтра выполнит следующие действия.
Установите флаг FILE_OPEN_REPARSE_POINT в блоке параметров ввода-вывода структуры данных обратного вызова.
Вызовите FltSetCallbackDataDirty.
Вызовите FltReissueSynchronousIo , чтобы повторно отправить запрос на создание.
Диспетчер фильтров отправляет повторно выпустимый запрос ввода-вывода только экземплярам драйвера минифильтра, подключенным под экземпляром-инициатором (указанный в параметре InitiatingInstance ) и в файловую систему. Экземпляры драйвера минифильтра, подключенные над экземпляром-инициатором, не получают повторно выпустимый запрос ввода-вывода.
Можно повторно выпустить только синхронизированные операции ввода-вывода. Чтобы предоставить драйверу возможность повторной отправки, путем вызова FltReissueSynchronousIo в подпрограмме обратного вызова после операции драйвер минифильтра должен специально возвращать FLT_PREOP_SYNCHRONIZE в процедуре обратного вызова перед операции.
Примечание
Драйвер минифильтра не вызывает подпрограмму FltIsOperationSynchronous , чтобы определить, возвращает ли подпрограмма обратного вызова перед операцией для этой операции FLT_PREOP_SYNCHRONIZE. Драйвер мини-фильтра вызывает FltIsOperationSynchronous , чтобы определить, является ли сама операция синхронной с точки зрения диспетчера ввода-вывода.
Можно переиздать только операции ввода-вывода на основе IRP. Быстрые операции ввода-вывода и операции обратного вызова фильтра файловой системы (FSFilter) невозможно повторно выпустить. Чтобы определить, основана ли операция ввода-вывода на основе IRP, используйте макрос FLT_IS_IRP_OPERATION .
Операцию создания (IRP_MJ_CREATE), которая была отменена, нельзя повторно выпустить. Перед вызовом FltReissueSynchronousIo для операции создания вызывающие объекты должны проверка элемент Flags объекта файла для операции создания. Если установлен флаг FO_FILE_OPEN_CANCELLED, это означает, что операция создания была отменена и для этого объекта файла будет выполнена операция закрытия (IRP_MJ_CLOSE). Если метод FltReissueSynchronousIo вызывается для операции создания, которая была отменена, диспетчер фильтров завершается ошибкой повторной отправки запроса ввода-вывода с STATUS_CANCELLED.
Примечание
Когда драйверы мини-фильтра повторно выдают create в обратном вызове после создания, им не нужно освобождать и устанавливать буфер, связанный с точкой повторного анализа (поле TagData в CallbackData), значение NULL. Вместо этого диспетчер фильтров освобождает и устанавливает для буфера значение NULL.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Накопительный пакет обновления 1 для Windows 2000 с пакетом обновления 4 (SP4); Windows XP с пакетом обновления 2 (SP2) |
Минимальная версия сервера | Windows Server 2003 с пакетом обновления 1 (SP1) |
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая FltKernel.h) |
Библиотека | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL (операции ввода-вывода без разбиения по страницам можно переиздить только в PASSIVE_LEVEL) |