DispatchRead, DispatchWrite 및 DispatchReadWrite 루틴
드라이버의 DispatchRead 및 DispatchWrite 루틴은 각각 IRP_MJ_READ 및 IRP_MJ_WRITE I/O 함수 코드로 IRP를 처리합니다. 또는 결합된 DispatchReadWrite 루틴은 이러한 두 I/O 함수 코드에 대한 IRP를 처리할 수 있습니다.
데이터를 시스템으로 전송할 수 있는 디바이스의 모든 드라이버에는 DispatchRead 루틴이 있어야 합니다. 시스템에서 데이터를 전송할 수 있는 디바이스의 모든 드라이버에는 DispatchWrite 루틴이 있어야 합니다. 양방향으로 데이터를 전송하는 모든 드라이버는 결합된 DispatchReadWrite 루틴을 가질 수 있습니다.
하위 수준 드라이버는 IRP_MJ_READ 처리하고 요청을 비동기적으로 IRP_MJ_WRITE . 따라서 요청이 IRP의 해당 드라이버 I/O 스택 위치에 유효한 매개 변수가 있는 경우 최상위 드라이버의 DispatchRead 및/또는 DispatchWrite 루틴은 추가 처리를 위해 이러한 요청을 전달해야 합니다.
드라이버가 버퍼링된 I/O 또는 직접 I/O에 대한 디바이스 개체를 설정하는지 여부는 전송 요청을 처리하는 방법에 영향을 줍니다. 특히 직접 I/O를 사용하여 DMA 작업을 수행하는 드라이버는 IRP_MJ_READ 또는 IRP_MJ_WRITE 요청을 충족하기 위해 큰 전송 요청을 더 작은 전송 작업 시퀀스로 분할해야 할 수 있습니다. 자세한 내용은 입력/출력 기술을 참조하세요.
다음 하위 섹션에서는 버퍼링된 I/O 및 직접 I/O를 사용하는 하위 수준 디바이스 드라이버와 그 위에 계층화된 상위 수준 드라이버에서 DispatchReadWrite 루틴에 대한 몇 가지 디자인 및 구현 고려 사항에 대해 설명합니다.
버퍼링된 I/O를 사용하여 DispatchReadWrite
Direct I/O를 사용하는 DispatchReadWrite