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 를 호출하여 FltAllocateCallbackData 및 FltPerformSynchronousIo 루틴에 대한 호출을 통해 생성된 미니 필터 드라이버가 I/O를 재발행할 수도 있습니다. 이 경우 작업 후 콜백 루틴에서 FltReissueSynchronousIo 를 호출하는지 또는 작업 콜백 루틴의 컨텍스트 외부에 있는지는 중요하지 않습니다. 사후 콜백 루틴의 컨텍스트 외부에 있는 호출의 경우 FltReuseCallbackData 및 FltPerformSynchronousIo 루틴을 대신 사용하는 것이 좋습니다.
호출자는 I/O 요청을 다시 실행하기 전에 콜백 데이터(FLT_CALLBACK_DATA) 구조체의 I/O 매개 변수 블록의 내용을 수정할 수 있습니다. 이 경우 FltReissueSynchronousIo 를 호출하기 전에 FltSetCallbackDataDirty를 호출해야 합니다.
예를 들어 미니 필터 드라이버가 재문 분석 지점을 사용하고 STATUS_REPARSE 반환하는 만들기 작업에 대해 해당 사후 만들기 콜백 루틴이 호출되는 경우 미니 필터 드라이버는 자체 재 분석 지점에 대해 만들기 작업을 다시 실행할 수 있습니다. 이 경우 미니 필터 드라이버는 다음 단계를 완료합니다.
콜백 데이터 구조의 I/O 매개 변수 블록에서 FILE_OPEN_REPARSE_POINT 플래그를 설정합니다.
FltSetCallbackDataDirty를 호출합니다.
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 요청에 실패합니다.
참고
미니 필터 드라이버는 사후 생성 콜백에서 만들기를 다시 실행하면 재분석 지점(CallbackData 의 TagData 필드)과 연결된 버퍼를 해제하고 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만 재발행할 수 있음) |
참조
피드백
다음에 대한 사용자 의견 제출 및 보기