IRP 완료

모든 디스패치 루틴은 DeviceObject 매개 변수에서 IRP의 대상 디바이스 개체에 대한 포인터를 받습니다. 필터 드라이버에 CDO(컨트롤 디바이스 개체)가 있는 경우 디스패치 루틴은 IRP에서 처리를 수행하기 전에 DeviceObject 포인터가 필터 드라이버의 CDO를 가리키는지 여부를 확인해야 합니다.

파일 시스템 필터 드라이버는 CDO로 특별히 전송되는 I/O 작업을 지원할 필요가 없습니다. 일반적으로 지원되는 작업에 대한 자세한 내용은 필터 드라이버의 제어 디바이스 개체를 참조하세요. 그러나 CDO는 전송되는 모든 IRP를 완료해야 합니다.

IRP를 완료 하려면 디스패치 루틴이 다음 단계를 모두 수행해야 합니다.

  1. Irp-IoStatus.Status>를 적절한 NTSTATUS 값으로 설정합니다.

  2. IRP를 I/O 관리자로 반환하려면 IoCompleteRequest 를 호출합니다.

  3. 1단계와 동일한 상태 값을 호출자에게 반환합니다.

IRP를 완료하는 것은 IRP를 "성공" 또는 "실패"라고도 합니다.

  • IRP를 성공 하려면 성공 또는 정보 NTSTATUS 값(예: STATUS_SUCCESS)으로 완료하는 것을 의미합니다.

  • IRP에 실패 한다는 것은 오류 또는 경고 NTSTATUS 값(예: STATUS_INVALID_DEVICE_REQUEST 또는 STATUS_BUFFER_OVERFLOW)으로 완료하는 것을 의미합니다.

NTSTATUS 값은 ntstatus.h에 정의됩니다. 이러한 값은 성공, 정보, 경고 및 오류의 네 가지 범주로 나뉘어 있습니다. 자세한 내용은 NTSTATUS 값 사용을 참조하세요.

참고 STATUS_PENDING 성공 NTSTATUS 값이지만 STATUS_PENDING 사용하여 IRP를 완료하는 것은 프로그래밍 오류입니다.