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로 설정할 수 없습니다.
반환 값
없음
발언
미니 필터 드라이버는 FltReissueSynchronousIo 사후 콜백(PFLT_POST_OPERATION_CALLBACK) 루틴에서 호출하여 동기화된 I/O 요청을 재발행합니다. 일반적으로 작업 후 콜백 루틴에서 FltReissueSynchronousIo 호출하여 다른 매개 변수를 사용하여 실패한 작업을 다시 실행하거나 재조사 바운스를 처리합니다. 그러나 FltReissueSynchronousIo 호출하여 FltAllocateCallbackData 및 FltPerformSynchronousIo 루틴에 대한 호출을 통해 생성된 미니 필터 드라이버가 I/O를 재발행할 수도 있습니다. 이 경우 사후 콜백 루틴에서 FltReissueSynchronousIo 호출할지 또는 작업 콜백 루틴의 컨텍스트 외부에서 호출하는지 여부는 중요하지 않습니다. 사후 콜백 루틴의 컨텍스트를 벗어난 호출의 경우 FltReuseCallbackData 및 FltPerformSynchronousIo 루틴을 대신 사용하는 것이 좋습니다.
호출자는 I/O 요청을 다시 실행하기 전에 콜백 데이터(FLT_CALLBACK_DATA) 구조체의 I/O 매개 변수 블록의 내용을 수정할 수 있습니다. 이 경우 FltReissueSynchronousIo호출하기 전에 FltSetCallbackDataDirty 호출해야 합니다.
예를 들어 미니 필터 드라이버가 재처리 지점을 사용하고 STATUS_REPARSE 반환하는 만들기 작업에 대해 만들기 후 콜백 루틴이 호출되는 경우 미니 필터 드라이버는 자체 재구매 지점에 대해 만들기 작업을 다시 실행할 수 있습니다. 이 경우 미니 필터 드라이버는 다음 단계를 완료합니다.
콜백 데이터 구조의 I/O 매개 변수 블록에서 FILE_OPEN_REPARSE_POINT 플래그를 설정합니다.
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 필드)과 연결된 버퍼를 해제하고 설정할 필요가 없습니다. 대신 Filter Manager는 해당 버퍼를 해제하고 해당 버퍼를 NULL로 설정합니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | WINDOWS 2000 SP4용 업데이트 롤업 1; Windows XP SP2 |
지원되는 최소 서버 | Windows Server 2003 SP1 |
대상 플랫폼 | 보편적 |
헤더 | fltkernel.h(FltKernel.h 포함) |
라이브러리 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL(페이징이 아닌 IO는 PASSIVE_LEVEL만 재발행할 수 있습니다.) |
참고 항목
IRP_MJ_CREATE대한FLT_PARAMETERS