비동기적으로 전송 처리
최고 수준의 드라이버를 제외하고 모든 드라이버는 IRP_MJ_READ 및 IRP_MJ_WRITE 요청을 비동기적으로 처리합니다. 최상위 드라이버의 DispatchRead 및 DispatchWrite 루틴은 하위 수준 드라이버가 비동기 읽기 또는 쓰기 요청 처리를 완료할 때까지 기다릴 수 없습니다. 드라이버를 낮추고 STATUS_PENDING 반환하려면 이러한 요청을 에 전달해야 합니다.
마찬가지로, 가장 낮은 수준의 디바이스 드라이버의 DispatchReadWrite 루틴은 디바이스 I/O 요청을 처리한 다음 STATUS_PENDING 반환하는 다른 드라이버 루틴에 전송 요청을 전달해야 합니다.
상위 수준의 드라이버는 경우에 따라 부분 전송 IRP를 설정하고 낮은 드라이버에 전달해야 합니다. 상위 수준 드라이버는 하위 드라이버가 부분 전송 요청을 완료한 경우에만 원래 읽기/쓰기 IRP를 완료할 수 있습니다.
예를 들어 기본 HBA의 전송 기능을 초과하는 큰 전송 요청을 부분 전송 요청 집합으로 분할하려면 SCSI 클래스 드라이버의 DispatchReadWrite 루틴이 필요합니다. 클래스 드라이버는 SCSI 포트/미니포트 드라이버가 단일 DMA 작업에서 각 부분 전송 요청을 충족할 수 있도록 부분 전송 IRP에 매개 변수를 설정해야 합니다.
DMA 또는 PIO를 사용하는 다른 디바이스 드라이버도 대규모 전송 요청을 직접 분할해야 할 수 있습니다.
DMA 및 PIO 사용에 대한 자세한 내용은 입력/출력 기술을 참조하세요.