FltReissueSynchronousIo 함수(fltkernel.h)
FltReissueSynchronousIo 는 이전에 동기화된 I/O 작업의 매개 변수를 사용하는 새 동기 I/O 작업을 시작합니다.
구문
VOID FLTAPI FltReissueSynchronousIo(
[in] PFLT_INSTANCE InitiatingInstance,
[in] PFLT_CALLBACK_DATA CallbackData
);
매개 변수
[in] InitiatingInstance
I/O 작업을 재발행하는 미니필터 드라이버 instance 대한 불투명 instance 포인터입니다. 이전 I/O 작업을 시작한 instance 동일해야 합니다. 이 매개 변수는 필수이며 NULL로 설정할 수 없습니다.
[in] CallbackData
이전에 동기화된 I/O 작업의 콜백 데이터(FLT_CALLBACK_DATA) 구조체에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL로 설정할 수 없습니다.
반환 값
없음
설명
미니필터 드라이버는 PFLT_POST_OPERATION_CALLBACK(사후 콜백) 루틴에서 FltReissueSynchronousIo를 호출하여 동기화된 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 요청을 시작 instance 아래에 연결된 미니필터 드라이버 인스턴스(InitiatingInstance 매개 변수에 지정됨) 및 파일 시스템에만 보냅니다. 시작 instance 위에 연결된 미니필터 드라이버 인스턴스는 재발행된 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 요청에 실패합니다.
참고
미니필터 드라이버는 생성 후 콜백에서 만들기를 다시 실행할 때 재분석 지점(CallbackData의 TagData 필드)과 연결된 버퍼를 해제하고 NULL로 설정할 필요가 없습니다. 대신 필터 관리자가 버퍼를 해제하고 해당 버퍼를 NULL로 설정합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | WINDOWS 2000 업데이트 롤업 1 SP4; Windows XP SP2 |
지원되는 최소 서버 | Windows Server 2003 SP1 |
대상 플랫폼 | 유니버설 |
헤더 | fltkernel.h(FltKernel.h 포함) |
라이브러리 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL(페이징이 아닌 IO는 PASSIVE_LEVEL 경우에만 재발행할 수 있습니다.) |