IoSetCompletionRoutine 함수(wdm.h)
IoSetCompletionRoutine 루틴은 다음 하위 수준 드라이버가 지정된 IRP에 대해 요청된 작업을 완료할 때 호출되는 IoCompletion 루틴을 등록합니다.
구문
void IoSetCompletionRoutine(
[in] PIRP Irp,
[in, optional] PIO_COMPLETION_ROUTINE CompletionRoutine,
[in, optional] __drv_aliasesMem PVOID Context,
[in] BOOLEAN InvokeOnSuccess,
[in] BOOLEAN InvokeOnError,
[in] BOOLEAN InvokeOnCancel
);
매개 변수
[in] Irp
드라이버가 처리 중인 IRP 에 대한 포인터입니다.
[in, optional] CompletionRoutine
다음 하위 드라이버가 패킷을 완료할 때 호출되는 드라이버 제공 IoCompletion 루틴의 진입점을 지정합니다.
[in, optional] Context
IoCompletion 루틴에 전달할 드라이버 결정 컨텍스트에 대한 포인터입니다. IoCompletion 루틴이 IRQL <= DISPATCH_LEVEL 호출되기 때문에 컨텍스트 정보는 비페이지 메모리에 저장되어야 합니다.
[in] InvokeOnSuccess
NT_SUCCESS 매크로의 결과에 따라 IRP의 IO_STATUS_BLOCK 구조에서 성공 상태 값으로 IRP가 완료될 경우 완료 루틴이 호출되는지 여부를 지정합니다(NTSTATUS 값 사용 참조).
[in] InvokeOnError
IRP의 IO_STATUS_BLOCK 구조에서 비구조적 상태 값으로 IRP가 완료될 경우 완료 루틴이 호출되는지 여부를 지정합니다.
[in] InvokeOnCancel
드라이버 또는 커널이 IRP를 취소하기 위해 IoCancelIrp 를 호출한 경우 완료 루틴이 호출되는지 여부를 지정합니다.
반환 값
없음
설명
IoSetCompletionRoutine 은 다음 하위 수준 드라이버가 다음 방법 중 일부 또는 전부에서 요청된 작업을 완료할 때 호출할 지정된 루틴을 등록합니다.
- 성공 상태 값 사용
- 비uccess 상태 값 사용
- IRP를 취소하여
IoAllocateIrp 또는 IoBuildAsynchronousFsdRequest를 사용하여 IRP를 할당하는 상위 수준 드라이버는 드라이버 할당 IRP를 IoCallDriver에 전달하기 전에 모든 InvokeOnXxx 매개 변수를 TRUE로 설정하여 이 루틴을 호출해야 합니다. 이러한 IRP를 사용하여 IoCompletion 루틴을 호출하는 경우 드라이버가 할당한 IRP 및 드라이버가 요청에 대해 설정한 기타 리소스(예: IoBuildPartialMdl을 사용하는 MDL)를 해제해야 합니다. 이러한 드라이버는 IoFreeIrp 를 호출하여 드라이버 할당 IRP에 대한 I/O 관리자의 완료 처리를 포리스트할 때 STATUS_MORE_PROCESSING_REQUIRED 반환해야 합니다.
IoCompletion 루틴을 실행하기 전에 언로드될 수 있는 PnP가 아닌 드라이버는 대신 IoSetCompletionRoutineEx를 사용해야 합니다.
요구 사항
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기