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


Функция 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.

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

Никакой

Замечания

Драйвер мини-фильтра вызывает FltReissueSynchronousIo из подпрограммы обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK) для повторного получения синхронизированного запроса ввода-вывода. Обычно он вызывает FltReissueSynchronousIo из подпрограммы обратного вызова после операции для повторной отправки неудачной операции с различными параметрами или для обработки повторной отскоки. Однако он также может вызывать FltReissueSynchronousIo для повторного получения ввода-вывода, созданного с помощью вызовов FltAllocateCallbackData и подпрограммы FltPerformSynchronousIo. В этой ситуации не имеет значения, вызывает ли он FltReissueSynchronousIo в подпрограмме обратного вызова после операции или вне контекста подпрограммы обратного вызова операции. Для вызовов вне контекста подпрограмм обратного вызова после операции рекомендуется использовать fltReuseCallbackData и FltPerformSynchronousIo подпрограммы.

Вызывающий объект может изменить содержимое блока параметров ввода-вывода структуры обратного вызова (FLT_CALLBACK_DATA) перед повторной выборой запроса ввода-вывода. Если это так, он должен вызывать FltSetCallbackDataDirty перед вызовом FltReissueSynchronousIo.

Например, если драйвер минифильтра использует точки повторного анализа, а его подпрограмма обратного вызова после создания вызывается для операции создания, возвращающей STATUS_REPARSE, драйвер минифильтра может повторно выполнить операцию создания для собственных точек повторного анализа. В этом случае драйвер минифильтра завершит следующие действия:

  1. Задайте флаг FILE_OPEN_REPARSE_POINT в блоке параметров ввода-вывода структуры данных обратного вызова.

  2. Вызов FltSetCallbackDataDirty.

  3. Вызовите 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.

Заметка

Когда драйверы минифильтра повторно выдают создание в обратном вызове после создания, им не нужно освободить и задать буфер, связанный с точкой повторного анализа (поле TagData в CallbackData) значение NULL. Вместо этого диспетчер фильтров выпускает и задает для них значение NULL.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Накопительный пакет обновления Windows 2000 1 для SP4; Windows XP с пакетом обновления 2 (SP2)
минимальный поддерживаемый сервер Windows Server 2003 с пакетом обновления 1 (SP1)
целевая платформа Всеобщий
заголовка fltkernel.h (include FltKernel.h)
библиотеки FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL (не разбиение операций ввода-вывода на разбиение по страницам можно повторно в PASSIVE_LEVEL)

См. также

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS для IRP_MJ_CREATE

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK