I/O 큐 만들기

프레임워크 큐 개체는 드라이버가 수신하는 I/O 요청에 대한 컨테이너인 I/O 큐를 나타냅니다. 각 드라이버는 각 디바이스에 대해 하나 이상의 I/O 큐를 만들 수 있습니다. 프레임워크 큐 개체는 드라이버가 제공할 수 있는 이벤트 콜백 함수 집합과 드라이버가 호출할 수 있는 개체 메서드 집합을 정의합니다.

프레임워크가 드라이버의 디바이스 중 하나로 전달되는 I/O 요청을 받으면 프레임워크는 적절한 I/O 큐에 요청을 배치합니다. 드라이버가 하나 이상의 요청 처리기를 등록하는 경우 프레임워크는 I/O 요청을 사용할 수 있게 될 때마다 드라이버에 알릴 수 있습니다. 또는 드라이버가 요청에 대한 I/O 큐를 폴링할 수 있습니다.

대부분의 드라이버는 EvtDriverDeviceAdd 콜백 함수에서 I/O 큐를 만듭니다. 디바이스에 대한 I/O 큐를 만들기 위해 드라이버는 프레임워크 큐 개체의 WdfIoQueueCreate 메서드(프레임워크 큐 개체를 만드는)를 호출합니다. 드라이버는 메서드에 WDF_IO_QUEUE_CONFIG 구조를 제공합니다. 이 구조에는 큐의 디스패치 메서드 및 큐에서 요청을 사용할 수 있을 때 프레임워크가 호출하는 요청 처리기에 대한 포인터와 같은 큐에 대한 구성 정보가 포함됩니다. 구조는 또한 큐가 전원 관리 되는지 여부와 드라이버가 큐의 I/O 요청에 대해 길이가 0인 버퍼를 지원하는지 여부를 나타냅니다.

드라이버가 WDF_IO_QUEUE_CONFIG 구조의 DefaultQueue 멤버를 TRUE로 설정하면 큐는 디바이스의 기본 I/O 큐가 됩니다. 드라이버가 기본 I/O 큐를 만드는 경우 일부 요청을 받을 추가 큐를 만들지 않는 한 프레임워크는 이 큐에 디바이스의 모든 I/O 요청을 배치합니다. 드라이버는 WdfDeviceGetDefaultQueue 메서드를 호출하여 디바이스의 기본 I/O 큐에 대한 핸들을 가져올 수 있습니다.

디바이스에 둘 이상의 I/O 큐를 사용하려는 경우 드라이버는 WdfIoQueueCreate 를 호출하여 필요한 만큼의 큐 개체를 만들 수 있습니다. 드라이버가 여러 큐를 만드는 경우 WdfDeviceConfigureRequestDispatching을 호출할 수 있습니다. 그러면 프레임워크에서 다양한 유형의 요청을 다른 큐로 보내도록 지시합니다. 예를 들어 모든 읽기 요청이 한 큐에 전달되고 모든 쓰기 요청이 다른 큐로 전달되도록 지정할 수 있습니다.

드라이버가 I/O 큐 집합을 만들고 WdfDeviceConfigureRequestDispatching을 호출하여 드라이버가 특정 큐에 수신할 수 있는 각 요청 유형을 지시하는 경우 드라이버는 기본 큐가 필요하지 않습니다.

드라이버가 특정 형식의 요청에 대한 I/O 큐를 제공하지 않고 드라이버가 함수 드라이버인 경우 프레임워크는 완료 상태 값 STATUS_INVALID_DEVICE_REQUEST 해당 형식의 요청을 완료합니다. 드라이버가 필터 드라이버이고 WdfFdoInitSetFilter를 호출한 경우 프레임워크는 이러한 요청을 드라이버 스택의 다음 하위 드라이버로 자동으로 전달합니다. 따라서 예를 들어 읽기 요청을 처리하지 않는 필터 드라이버는 읽기 요청을 수신하는 I/O 큐를 제공할 필요가 없습니다.

드라이버가 I/O 큐를 사용하는 방법의 예는 I/O 큐의 예제 사용을 참조하세요.