IoCompletion 루틴 사용

IRP별로 모니터링하는 상위 수준 드라이버는 특정 요청을 수행한 하위 수준 드라이버에 하나 이상의 IoCompletion 루틴이 있을 수 있습니다. 낮은 드라이버에 요청을 보내기 위해 IRP를 할당하는 상위 수준 드라이버에는 IoCompletion 루틴이 있어야 합니다.

최상위 또는 중간 드라이버의 DispatchRead 또는 DispatchWrite 루틴은 하위 수준 드라이버가 전송 요청을 비동기적으로 처리해야 하기 때문에 IRP에 대한 IoCompletion 루틴을 설정할 가능성이 가장 높습니다.

드라이버 스택의 최저 수준 드라이버는 IoCompletion 루틴을 등록할 수 없습니다.

드라이버는 일반적으로 동기 I/O 작업과 연결된 IRP에 대한 IoCompletion 루틴을 등록하지 않습니다. instance 경우 상위 수준 드라이버의 DispatchDeviceControl 루틴은 IoBuildDeviceIoControlRequest를 사용하여 IRP를 할당할 수 있습니다. 이 경우 디바이스 제어 요청은 일반적으로 동기적으로 처리되므로 디스패치 루틴은 일반적으로 IoCompletion 루틴을 등록하지 않습니다. 대신 드라이버는 이벤트 개체를 할당하고 초기화할 수 있으며, DispatchDeviceControl 루틴은 드라이버 할당 IRP에서 전송할 때 이벤트가 초기화될 때까지 기다릴 수 있습니다. 일반적으로 상위 수준 드라이버는 동일한 이유로 IoBuildSynchronousFsdRequest로 할당된 IRP에 대한 IoCompletion 루틴을 등록하지 않습니다.

이 섹션에서는 다음 항목을 다룹니다.

IoCompletion 루틴 등록

IoCompletion 루틴 구현