FltPerformAsynchronousIo 함수(fltkernel.h)

미니필터 드라이버는 FltPerformAsynchronousIo 를 호출하여 비동기 I/O 작업을 시작합니다.

구문

NTSTATUS FLTAPI FltPerformAsynchronousIo(
  [in, out] PFLT_CALLBACK_DATA               CallbackData,
  [in]      PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
  [in]      PVOID                            CallbackContext
);

매개 변수

[in, out] CallbackData

FltAllocateCallbackData에 대한 이전 호출에 의해 할당된 콜백 데이터(FLT_CALLBACK_DATA) 구조체에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다. 호출자는 FltFreeCallbackData를 호출하여 더 이상 필요하지 않은 경우 이 구조를 해제할 책임이 있습니다.

[in] CallbackRoutine

I/O 작업이 완료될 때 호출할 PFLT_COMPLETED_ASYNC_IO_CALLBACK 형식의 콜백 루틴에 대한 포인터입니다. 참고: 필터 관리자는 인스턴스가 시작 instance 아래에 연결된 미니필터 드라이버의 PFLT_POST_OPERATION_CALLBACK(Postoperation Callback) 루틴을 호출한 후 이 루틴을 호출합니다(FltAllocateCallbackData대한 Instance 매개 변수에 지정됨). 이 매개 변수는 필수이며 NULL일 수 없습니다. FltPerformAsynchronousIo가 실패하는 경우에도 필터 관리자는 항상 이 루틴을 호출합니다.

[in] CallbackContext

CallbackRoutine에 전달할 컨텍스트 포인터 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

FltPerformAsynchronousIo 는 파일 시스템에서 I/O 작업이 완료되었으며 CallbackRoutine 이 가리키는 콜백 루틴이 호출되었음을 나타내는 STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.

반환 코드 설명
STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST IRP_MJ_CREATE 요청을 비동기적으로 수행할 수 없습니다. 오류 코드입니다.
STATUS_PENDING STATUS_PENDING 반환된 작업입니다. 필터 관리자는 I/O 작업이 완료될 때 CallbackRoutine 이 가리키는 콜백 루틴을 호출합니다. 이 코드는 작업이 시작되었음을 나타냅니다.
STATUS_FLT_IO_COMPLETE 이 작업은 인스턴스가 시작 instance 아래에 연결된 미니필터 드라이버의 사전 운용 콜백 루틴에 의해 완료되었습니다.

설명

미니필터 드라이버는 FltAllocateCallbackData를 호출하여 작업에 대한 콜백 데이터 구조를 할당한 후 FltPerformAsynchronousIo를 호출하여 비동기 I/O 작업을 시작합니다.

FltPerformAsynchronousIo는 시작 instance 아래에 연결된 미니필터 드라이버 인스턴스(FltAllocateCallbackDataInstance 매개 변수에 지정됨) 및 파일 시스템에만 I/O 작업을 보냅니다. 지정된 instance 위에 연결된 미니필터 드라이버는 I/O 작업을 받지 못합니다.

미니필터 드라이버는 IRP 기반 I/O 작업만 시작할 수 있습니다. 빠른 I/O 또는 FSFilter(파일 시스템 필터) 콜백 작업을 시작할 수 없습니다.

미니필터 드라이버는 다음과 같은 루틴을 사용할 수 없는 비동기 I/O 작업에만 FltPerformAsynchronousIo 를 사용해야 합니다.

IRP_MJ_CREATE 요청을 비동기적으로 수행할 수 없습니다.

콜백 데이터(FLT_CALLBACK_DATA) 구조체는 CallbackRoutine 이 가리키는 콜백 루틴이 호출된 후 언제든지 해제하거나 다시 사용할 수 있습니다. 호출자는 FltFreeCallbackData를 호출하여 콜백 데이터 구조를 해제하거나 FltReuseCallbackData를 호출하여 재사용을 준비할 수 있습니다.

참고

STATUS_SUCCESS 및 STATUS_FLT_IO_COMPLETE I/O 작업이 완료되었음을 나타내지만 I/O 작업의 최종 상태 나타내지는 않습니다. 기본 미니필터 드라이버, 필터 드라이버 및 파일 시스템에서 반환되는 실제 작업 상태 확인하려면 CallbackRoutine은 CallbackRoutineCallbackContext 매개 변수에서 받은 콜백 데이터 구조의 IoStatus 멤버를 검사해야 합니다.

Filter Manager는 항상 CallbackRoutine 이 가리키는 콜백 루틴을 호출하므로 FltPerformAsynchronousIo 가 실패하더라도 미니필터 드라이버는 콜백 루틴에서 직접 해제 또는 재사용 작업을 수행할 수 있습니다.

fltPerformAsynchronousIo의 호출자는 작업에 대한 FLT_IO_PARAMETER_BLOCK 구조체의 IrpFlags 멤버에 IRP_PAGING_IO 플래그가 설정된 경우 IRQL <= APC_LEVEL 실행할 수 있습니다. (이 플래그는 IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_QUERY_INFORMATION 및 IRP_MJ_SET_INFORMATION 작업에만 유효합니다.) 그렇지 않으면 호출자가 IRQL PASSIVE_LEVEL 실행 중이어야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
DLL Fltmgr.sys
IRQL 설명 섹션을 참조하십시오.

추가 정보

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData

FltPerformSynchronousIo

FltReuseCallbackData

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK