다음을 통해 공유


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형식의 콜백 루틴에 대한 포인터입니다. 참고: 필터 관리자는 인스턴스가 시작 인스턴스 아래에 연결된 미니 필터 드라이버의 작업 후 콜백(PFLT_POST_OPERATION_CALLBACK) 루틴을 호출한 후 이 루틴을 호출합니다(fltAllocateCallbackData Instance 매개 변수에 지정됨). 이 매개 변수는 필수이며 NULL 수 없습니다. FltPerformAsynchronousIo 실패하는 경우에도 필터 관리자는 항상 이 루틴을 호출합니다.

[in] CallbackContext

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

반환 값

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

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

발언

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

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

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

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

  • fltReadFile

  • fltWriteFile

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

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

메모

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

필터 관리자는 항상 CallbackRout ine 가리키는 콜백 루틴을 호출하므로 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