I/O 요청에 대한 메서드 디스패치
드라이버가 WdfIoQueueCreate 를 호출하여 I/O 큐를 만들 때 큐에 대한 디스패치 메서드를 지정합니다. 프레임워크는 순차적, 병렬 및 수동의 세 가지 디스패치 메서드를 제공합니다. 드라이버는 디바이스의 기본 I/O 큐를 포함하여 모든 I/O 큐에 대해 이러한 디스패치 메서드를 지정할 수 있습니다.
드라이버는 큐의 WDF_IO_QUEUE_CONFIG 구조에서WDF_IO_QUEUE_DISPATCH_TYPE 형식의 값을 지정하여 큐의 디스패치 메서드를 설정합니다.
각 디스패치 메서드의 예제 사용은 예제 I/O 큐 사용을 참조하세요.
순차 디스패치
드라이버 또는 디바이스가 큐에서 한 번에 하나의 I/O 요청만 처리할 수 있는 경우 동기 디스패치라고도 하는 순차적 디스패치를 사용하도록 디바이스의 I/O 큐를 설정해야 합니다. 이러한 유형의 디스패치를 통해 프레임워크는 한 번에 하나씩 드라이버에 요청을 전달합니다. 프레임워크는 드라이버가 이전 요청을 완료, 취소 또는 다시 큐 에 넣기 전까지는 다음 요청을 전달하지 않습니다.
프레임워크가 드라이버의 요청 처리기 중 하나에 요청을 전달한 후 드라이버는 요청을 처리합니다. 드라이버가 일반 I/O 대상에 요청을 전달하는 경우 일반적으로 I/O 대상 개체의 동기 메서드 중 하나를 호출합니다. 이러한 메서드에 대한 자세한 내용은 동기 적으로 I/O 요청 보내기를 참조하세요. 드라이버는 결국 I/O 큐에서 수신하는 모든 요청을 완료 하거나 취소 해야 합니다.
순차적 디스패치를 위해 I/O 큐를 설정한 드라이버는 WdfIoQueueRetrieveNextRequest 또는 WdfIoQueueRetrieveRequestByFileObject 를 호출하여 마지막으로 받은 요청이 완료되거나 취소되기 전에 큐에서 다른 요청을 가져올 수 있습니다. 드라이버의 EvtInterruptDpc 콜백 함수가 여전히 이전 하드웨어 작업의 데이터를 처리하는 동안 드라이버가 다음 하드웨어 작업을 시작할 수 있도록 함수 드라이버에서 이 작업을 수행할 수 있습니다.
여러 I/O 큐를 만들고 순차적 디스패치를 위해 모두 설정하는 경우 프레임워크는 각 큐의 요청을 순차적으로 디스패치하지만 큐는 병렬로 실행됩니다. 드라이버 또는 디바이스가 모든 유형의 한 번에 하나의 요청만 처리할 수 있는 경우 EvtIoDefault 콜백 함수와 함께 단일 I/O 큐를 사용해야 합니다.
병렬 디스패치
드라이버와 디바이스가 여러 I/O 요청을 동시에 처리할 수 있는 경우 드라이버가 요청을 비동기적으로 처리할 수 있도록 병렬 디스패치를 사용하도록 디바이스의 I/O 큐를 설정할 수 있습니다. 이 디스패치 메서드를 비동기 디스패치라고도 합니다.
드라이버가 병렬 디스패치를 사용하도록 I/O 큐를 설정하는 경우 프레임워크는 큐에서 사용할 수 있는 즉시 드라이버에 I/O 요청을 전달합니다. 그 결과 드라이버는 한 번에 여러 요청을 처리해야 할 수 있습니다.
드라이버의 요청 처리기 중 하나가 요청을 받을 때마다 드라이버는 요청을 처리 한 다음 요청을 완료 해야 합니다. 드라이버가 일반 I/O 대상에 요청을 전달하는 경우 일반적으로 I/O 대상 개체의 비동기 메서드 중 하나를 호출합니다. 이러한 메서드에 대한 자세한 내용은 비동기적으로 I/O 요청 보내기를 참조하세요. 드라이버는 결국 I/O 큐에서 수신하는 모든 요청을 완료 하거나 취소 해야 합니다.
병렬 디스패치를 사용하는 드라이버는 WdfIoQueueStop 또는 WdfIoQueueStopSynchronously 를 호출하여 큐를 일시적으로 중지한 다음 , WdfIoQueueStart 를 호출하여 큐를 다시 시작할 수 있습니다.
수동 디스패치
드라이버가 I/O 요청 배달을 완전히 제어하도록 하려면 수동 디스패치를 사용하도록 디바이스의 I/O 큐를 설정할 수 있습니다. 즉, 드라이버가 명시적으로 요청하지 않는 한 프레임워크가 드라이버에 요청을 전달하지 않습니다.
수동 큐에서 요청을 가져오기 위해 드라이버는 큐를 폴링하는 루프에서 WdfIoQueueRetrieveNextRequest 또는 WdfIoQueueRetrieveRequestByFileObject 를 호출할 수 있습니다. 또는 드라이버가 WdfIoQueueReadyNotify 를 호출하여 큐에서 하나 이상의 요청을 사용할 수 있을 때 프레임워크가 호출할 콜백 함수를 등록할 수 있습니다. 프레임워크가 콜백 함수를 호출한 후 드라이버는 루프에서 WdfIoQueueRetrieveNextRequest 또는 WdfIoQueueRetrieveRequestByFileObject 를 호출하여 요청을 검색할 수 있습니다.
드라이버가 큐에서 요청을 가져온 후 요청을 처리해야 합니다. 드라이버는 결국 각 요청을 완료 하거나 취소 해야 합니다.