FltReissueSynchronousIo 함수(fltkernel.h)

FltReissueSynchronousIo 는 이전에 동기화된 I/O 작업의 매개 변수를 사용하는 새 동기 I/O 작업을 시작합니다.

구문

VOID FLTAPI FltReissueSynchronousIo(
  [in] PFLT_INSTANCE      InitiatingInstance,
  [in] PFLT_CALLBACK_DATA CallbackData
);

매개 변수

[in] InitiatingInstance

I/O 작업을 다시 생성하는 미니 필터 드라이버 인스턴스에 대한 불투명 인스턴스 포인터입니다. 이전 I/O 작업을 시작한 인스턴스와 동일해야 합니다. 이 매개 변수는 필수이며 NULL로 설정할 수 없습니다.

[in] CallbackData

이전에 동기화된 I/O 작업의 콜백 데이터(FLT_CALLBACK_DATA) 구조체에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL로 설정할 수 없습니다.

반환 값

없음

설명

미니 필터 드라이버는 PFLT_POST_OPERATION_CALLBACK(사후 콜백) 루틴에서 FltReissueSynchronousIo 를 호출하여 동기화된 I/O 요청을 다시 제출합니다. 일반적으로 사후 작업 콜백 루틴에서 FltReissueSynchronousIo 를 호출하여 실패한 작업을 다른 매개 변수로 재발행하거나 재구매 바운스를 처리합니다. 그러나 FltReissueSynchronousIo 를 호출하여 FltAllocateCallbackDataFltPerformSynchronousIo 루틴에 대한 호출을 통해 생성된 미니 필터 드라이버가 I/O를 재발행할 수도 있습니다. 이 경우 작업 후 콜백 루틴에서 FltReissueSynchronousIo 를 호출하는지 또는 작업 콜백 루틴의 컨텍스트 외부에 있는지는 중요하지 않습니다. 사후 콜백 루틴의 컨텍스트 외부에 있는 호출의 경우 FltReuseCallbackDataFltPerformSynchronousIo 루틴을 대신 사용하는 것이 좋습니다.

호출자는 I/O 요청을 다시 실행하기 전에 콜백 데이터(FLT_CALLBACK_DATA) 구조체의 I/O 매개 변수 블록의 내용을 수정할 수 있습니다. 이 경우 FltReissueSynchronousIo 를 호출하기 전에 FltSetCallbackDataDirty를 호출해야 합니다.

예를 들어 미니 필터 드라이버가 재문 분석 지점을 사용하고 STATUS_REPARSE 반환하는 만들기 작업에 대해 해당 사후 만들기 콜백 루틴이 호출되는 경우 미니 필터 드라이버는 자체 재 분석 지점에 대해 만들기 작업을 다시 실행할 수 있습니다. 이 경우 미니 필터 드라이버는 다음 단계를 완료합니다.

  1. 콜백 데이터 구조의 I/O 매개 변수 블록에서 FILE_OPEN_REPARSE_POINT 플래그를 설정합니다.

  2. FltSetCallbackDataDirty를 호출합니다.

  3. FltReissueSynchronousIo 를 호출하여 만들기 요청을 다시 실행합니다.

필터 관리자는 다시 발급된 I/O 요청을 시작 인스턴스 아래에 연결된 미니 필터 드라이버 인스턴스( InitiatingInstance 매개 변수에 지정됨) 및 파일 시스템에만 보냅니다. 시작 인스턴스 위에 연결된 미니 필터 드라이버 인스턴스는 재발행된 I/O 요청을 받지 않습니다.

동기화된 I/O 작업만 다시 실행할 수 있습니다. 사후 콜백 루틴에서 FltReissueSynchronousIo 를 호출하여 드라이버에 재발행 기능을 제공하려면 미니 필터 드라이버가 사전 운용 콜백 루틴의 FLT_PREOP_SYNCHRONIZE 구체적으로 반환해야 합니다.

참고

미니 필터 드라이버는 FltIsOperationSynchronous 루틴을 호출하지 않고 이 작업에 대한 사전 운용 콜백 루틴이 FLT_PREOP_SYNCHRONIZE 반환되는지 여부를 확인합니다. 미니 필터 드라이버는 FltIsOperationSynchronous 를 호출하여 작업 자체가 I/O 관리자의 관점에서 동기적인지 여부를 확인합니다.

IRP 기반 I/O 작업만 다시 실행할 수 있습니다. 빠른 I/O 작업 및 FSFilter(파일 시스템 필터) 콜백 작업을 다시 실행할 수 없습니다. I/O 작업이 IRP 기반인지 여부를 확인하려면 FLT_IS_IRP_OPERATION 매크로를 사용합니다.

취소된 만들기(IRP_MJ_CREATE) 작업은 다시 실행할 수 없습니다. 만들기 작업에 대해 FltReissueSynchronousIo 를 호출하기 전에 호출자는 파일 개체의 Flags 멤버에서 만들기 작업을 확인해야 합니다. FO_FILE_OPEN_CANCELLED 플래그가 설정되면 만들기 작업이 취소되고 이 파일 개체에 대해 닫기(IRP_MJ_CLOSE) 작업이 실행됨을 의미합니다. 취소된 만들기 작업을 위해 FltReissueSynchronousIo 가 호출되면 필터 관리자가 STATUS_CANCELLED 다시 전송된 I/O 요청에 실패합니다.

참고

미니 필터 드라이버는 사후 생성 콜백에서 만들기를 다시 실행하면 재분석 지점(CallbackDataTagData 필드)과 연결된 버퍼를 해제하고 NULL로 설정할 필요가 없습니다. 대신 Filter Manager는 버퍼를 해제하고 해당 버퍼를 NULL로 설정합니다.

요구 사항

   
지원되는 최소 클라이언트 sp4용 Windows 2000 업데이트 롤업 1 WINDOWS XP SP2
지원되는 최소 서버 Windows Server 2003 SP1
대상 플랫폼 유니버설
헤더 fltkernel.h(FltKernel.h 포함)
라이브러리 FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL(페이징이 아닌 IO는 PASSIVE_LEVEL만 재발행할 수 있음)

참조

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

IRP_MJ_CREATE 대한 FLT_PARAMETERS

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK