IWDFDevice::CreateIoQueue 메서드(wudfddi.h)

[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.]

CreateIoQueue 메서드는 디바이스와 연결된 기본 I/O 큐를 구성하거나 디바이스에 대한 보조 I/O 큐를 만듭니다.

구문

HRESULT CreateIoQueue(
  [in, optional] IUnknown                   *pCallbackInterface,
  [in]           BOOL                       bDefaultQueue,
  [in]           WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
  [in]           BOOL                       bPowerManaged,
  [in]           BOOL                       bAllowZeroLengthRequests,
  [out]          IWDFIoQueue                **ppIoQueue
);

매개 변수

[in, optional] pCallbackInterface

프레임워크가 드라이버가 큐에서 구독하는 이벤트 콜백 함수를 확인하는 데 사용하는 IUnknown 인터페이스에 대한 포인터입니다. 관련 이벤트가 발생할 때 프레임워크에서 호출하는 함수입니다.

UMDF 버전 1.9 이상에서는 순차 또는 병렬 디스패치 메서드를 사용하는 I/O 큐에 이 매개 변수가 필요하며 수동 디스패치 메서드를 사용하는 I/O 큐의 경우 선택 사항(NULL일 수 있음)입니다. 1.9 이전의 UMDF 버전의 경우 이 매개 변수는 모든 디스패치 메서드에 필요합니다.

[in] bDefaultQueue

기본 I/O 큐를 구성할지 또는 디바이스에 대한 보조 I/O 큐를 만들지 여부를 지정하는 BOOL 값입니다. TRUE 는 기본 I/O 큐를 구성하도록 나타냅니다. FALSE 는 보조 I/O 큐를 만드는 것을 나타냅니다.

[in] DispatchType

드라이버가 I/O 큐에서 요청을 수신하는 방법을 식별하는 WDF_IO_QUEUE_DISPATCH_TYPE 형식의 값입니다.

[in] bPowerManaged

I/O 큐가 전원 관리되는지 여부를 지정하는 BOOL 값입니다. TRUE는 프레임워크가 플러그 앤 플레이(PnP) 및 디바이스의 전원 상태를 사용하여 I/O 큐에 대한 디스패치를 자동으로 조정했음을 나타냅니다. FALSE는 자동으로 조정된 디스패치를 표시하지 않습니다.

[in] bAllowZeroLengthRequests

프레임워크가 드라이버가 처리할 I/O 큐에 길이가 0인 I/O 요청을 직접 배치할지 여부를 지정하는 BOOL 값입니다. TRUE 는 드라이버가 길이가 0인 버퍼가 있는 읽기 및 쓰기 요청을 수신해야 했음을 나타냅니다. 즉, 프레임워크는 이러한 요청 형식을 드라이버의 I/O 큐에 자동으로 직접 배치합니다. FALSE 는 프레임워크가 I/O 큐에 배치하는 대신 길이가 0인 I/O 요청을 완료했음을 나타냅니다.

[out] ppIoQueue

새로 만든 I/O 큐 개체 또는 기본 I/O 큐 개체에 대한 IWDFIoQueue 인터페이스에 대한 포인터를 수신하는 변수에 대한 포인터입니다.

반환 값

CreateIoQueue 는 다음 값 중 하나를 반환합니다.

반환 코드 Description
S_OK
I/O 큐가 성공적으로 생성되었습니다.
HRESULT_FROM_WIN32(ERROR_BAD_CONFIGURATION)
I/O 큐는 다음 방법 중 하나로 구성됩니다.
  • DispatchType 매개 변수는 비관리 큐를 지정하며 설명 섹션에 지정된 I/O 큐 콜백 인터페이스는 pCallbackInterface 매개 변수를 통해 지원되지 않습니다.
  • DispatchType 매개 변수는 수동 큐를 지정하고 설명 섹션에 지정된 하나 이상의 I/O 큐 콜백 인터페이스는 pCallbackInterface 매개 변수를 통해 지원됩니다.
이러한 구성에 대한 자세한 내용은 설명 섹션을 참조하세요.
 

CreateIoQueue 는 다른 HRESULT 값도 반환할 수 있습니다.

설명

드라이버가 pCallbackInterface 매개 변수에 제공하는 IUnknown 인터페이스는 여러 큐 콜백 함수를 지원할 수 있습니다. 프레임워크는 제공된 IUnknown 인터페이스에서 QueryInterface 메서드를 여러 번 호출하여 드라이버가 지원하는 인터페이스 메서드를 검색합니다. 애플리케이션이 지원되는 인터페이스의 메서드(예: I/O 읽기 요청)와 관련된 작업을 수행하는 경우 프레임워크는 메서드(예: IQueueCallbackRead::OnRead 메서드)를 호출하여 드라이버에 알립니다. 프레임워크는 다음 인터페이스에 대해 QueryInterface 를 호출합니다.

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackRead

IQueueCallbackWrite

드라이버가 CreateIoQueueDispatchType 매개 변수에 대해 WdfIoQueueDispatchSequential 또는 WdfIoQueueDispatchParallel을 전달하여 비관리 큐를 만들면 드라이버의 큐 콜백 개체가 위의 인터페이스 중 하나 이상을 구현하고 pCallbackInterface가 가리키는 IUnknown 인터페이스를 통해 이러한 인터페이스의 지원을 나타내는 경우에만 CreateIoQueue에서 S_OK 반환할 수 있습니다.

드라이버가 WdfIoQueueDispatchManual for DispatchType 을 전달하여 수동 큐를 만들면 드라이버의 큐 콜백 개체가 이전 콜백 인터페이스를 구현하거나 지원하지 않는 경우에만 CreateIoQueue 에서 S_OK 반환할 수 있습니다. 드라이버의 콜백 개체에 대한 자세한 내용은 콜백 개체 만들기를 참조하세요.

참고 드라이버는 드라이버가 순차적 또는 병렬 큐에 사용하는 수동 큐에 대해 동일한 콜백 개체를 사용할 수 없습니다. 즉, 드라이버가 CreateIoQueue 호출에서 IUnknown 인터페이스에 특정 포인터를 전달하여 수동 큐를 만드는 경우 드라이버는 나중에 CreateIoQueue 호출에서 IUnknown에 동일한 포인터를 전달하여 순차적 또는 병렬 큐를 만들 수 없습니다.
 
디스패치 모드 구성에 대한 자세한 내용은 I/O 큐에 대한 디스패치 모드 구성을 참조하세요.

또한 프레임워크는 제공된 IUnknown 인터페이스에서 QueryInterface를 호출하여 드라이버가 다음 인터페이스를 지원하는지 확인합니다.

IObjectCleanup

IQueueCallbackIoResume

IQueueCallbackIoStop

또한 프레임워크는 제공된 IUnknown 인터페이스에서 QueryInterface를 호출하여 드라이버가 IQueueCallbackStateChange 인터페이스를 지원하는지 확인합니다. 드라이버의 큐 콜백 개체는 선택적으로 수동 큐에 대해서만 IQueueCallbackStateChange 지원을 구현하고 나타낼 수 있습니다. 드라이버의 큐 콜백 개체는 순차적 또는 병렬 큐에 대한 IQueueCallbackStateChange 지원을 구현하고 표시해서는 안 됩니다.

예제

CreateIoQueue 메서드를 사용하는 방법에 대한 코드 예제는 IWDFDriver::CreateDevice를 참조하세요.

요구 사항

요구 사항
지원 종료 UMDF 2.0 이상에서는 사용할 수 없습니다.
대상 플랫폼 데스크톱
최소 UMDF 버전 1.5
머리글 wudfddi.h(Wudfddi.h 포함)
DLL WUDFx.dll

추가 정보

IObjectCleanup

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackIoResume

IQueueCallbackIoStop

IQueueCallbackRead

IQueueCallbackStateChange

IQueueCallbackWrite

IWDFDevice

IWDFIoQueue

WDF_IO_QUEUE_DISPATCH_TYPE