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 를 호출하여 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 요청을 시작 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 요청에 실패합니다.

참고

미니필터 드라이버는 생성 후 콜백에서 만들기를 다시 실행할 때 재분석 지점(CallbackDataTagData 필드)과 연결된 버퍼를 해제하고 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 경우에만 재발행할 수 있습니다.)

추가 정보

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