다음을 통해 공유


USBD_SelectInterfaceUrbAllocateAndBuild 함수(usbdlib.h)

USBD_SelectInterfaceUrbAllocateAndBuild 루틴은 요청이 인터페이스를 선택하거나 대체 설정을 변경하는 데 필요한 URB 구조체를 할당하고 형식을 지정합니다.

통사론

NTSTATUS USBD_SelectInterfaceUrbAllocateAndBuild(
  [in]  USBD_HANDLE                USBDHandle,
  [in]  USBD_CONFIGURATION_HANDLE  ConfigurationHandle,
        PUSBD_INTERFACE_LIST_ENTRY InterfaceListEntry,
  [out] PURB                       *Urb
);

매개 변수

[in] USBDHandle

USBD_CreateHandle 루틴에 대한 이전 호출에서 클라이언트 드라이버가 검색한 USBD 핸들입니다.

[in] ConfigurationHandle

드라이버 스택이 선택 구성 요청을 완료한 후 URB 구조의 UrbSelectConfiguration.ConfigurationHandle 멤버에서 USB 드라이버 스택에서 반환된 핸들입니다.

InterfaceListEntry

호출자가 할당한 USBD_INTERFACE_LIST_ENTRY 구조체에 대한 포인터입니다. 자세한 내용은 비고를 참조하세요.

[out] Urb

USBD_SelectInterfaceUrbAllocateAndBuild할당된 URB를 수신하는 URB 구조체에 대한 포인터입니다. 클라이언트 드라이버는 드라이버가 USBD_UrbFree호출하여 URB 사용을 마쳤을 때 URB를 해제해야 합니다.

반환 값

루틴은 NTSTATUS 코드를 반환합니다. 가능한 값은 다음 표에 나열된 상태 코드를 포함하지만 제한되지 않습니다.

반환 코드 묘사
STATUS_SUCCESS
일상적인 호출이 성공했습니다.
STATUS_INVALID_PARAMETER
호출자가 매개 변수에서 NULL을 전달했습니다.
STATUS_INSUFFICIENT_RESOURCES
호출을 완료하는 데 사용할 수 있는 메모리가 부족합니다.

발언

클라이언트 드라이버는 디바이스에서 구성을 선택한 후 USBD_SelectInterfaceUrbAllocateAndBuild 루틴을 호출해야 합니다. 구성 선택 요청이 완료되면 클라이언트 드라이버는 URB의 UrbSelectConfiguration.ConfigurationHandle 멤버에서 구성 핸들을 받습니다. 해당 핸들은 USBD_SelectInterfaceUrbAllocateAndBuildConfigurationHandle 매개 변수에 지정해야 합니다.

클라이언트 드라이버는 USBD_SelectInterfaceUrbAllocateAndBuild 호출하여 선택한 구성에서 인터페이스의 대체 설정을 변경하는 선택 인터페이스 요청에 대한 URB를 할당하고 빌드합니다. USBD_SelectInterfaceUrbAllocateAndBuild호출에서 클라이언트 드라이버는 USBD_INTERFACE_LIST_ENTRY 구조체에 대한 포인터를 할당하고 제공해야 합니다. 클라이언트 드라이버는 다음과 같이 구조체 멤버를 설정해야 합니다.

  • InterfaceDescriptor 멤버는 선택할 대체 설정이 있는 인터페이스 설명자가 포함된 USB_INTERFACE_DESCRIPTOR 구조를 가리킵니다. 인터페이스 설명자는 구성 설명자와 연결된 인터페이스 및 엔드포인트 설명자를 가져오기 위한 이전 요청에서 얻은 것입니다.
  • 인터페이스 멤버는 NULL이어야 합니다.
USBD_SelectInterfaceUrbAllocateAndBuildURB 구조를 할당하고 지정된 인터페이스 설정 및 엔드포인트에 대한 정보로 채웁니다. 루틴은 USBD_INTERFACE_INFORMATION 구조도 할당합니다. 구조체 멤버(파이프 정보 제외)는 지정된 인터페이스 설명자에 따라 채워집니다. USBD_SelectInterfaceUrbAllocateAndBuildUSBD_INTERFACE_LIST_ENTRY인터페이스 멤버를 URB의 USBD_INTERFACE_INFORMATION 주소로 설정합니다. 클라이언트 드라이버는 이 URB를 USB 드라이버 스택으로 보내 인터페이스에서 대체 설정을 선택할 수 있습니다.

클라이언트 드라이버는 단일 선택 인터페이스 요청에서 여러 인터페이스의 대체 설정을 변경할 수 없습니다. 각 요청은 하나의 인터페이스만 대상으로 합니다.

선택 인터페이스 요청이 완료되면 USB 드라이버 스택은 선택한 대체 설정에 정의된 엔드포인트에 대해 열린 파이프에 대한 정보로 USBD_INTERFACE_INFORMATION 채웁니다. 클라이언트 드라이버는 USBD_INTERFACE_INFORMATION파이프 멤버가 가리키는 배열을 검사하여 해당 파이프 핸들을 가져오고 향후 데이터 전송 요청에 대한 핸들을 저장할 수 있습니다.

클라이언트 드라이버는 동일한 대체 설정에 대한 다른 선택 인터페이스 요청에 대해서만USBD_SelectInterfaceUrbAllocateAndBuild 의해 할당된 URB를 다시 사용할 수 있습니다. 클라이언트 드라이버 다른 유형의 요청이나 다른 대체 설정에 대한 다른 선택 인터페이스 요청에 URB를 다시 사용할 않아야 합니다. 새 URB를 할당하는 대신 기존 URB를 다시 사용하는 것이 특정 시나리오에서 선호되는 방법입니다. 두 대역폭 요구 사항에 대해 정의된 두 가지 대체 설정이 있는 인터페이스가 있는 USB 오디오 디바이스를 고려합니다. 0 설정은 0 대역폭에 대해 정의됩니다. 설정 1은 일정량의 대역폭을 사용하도록 정의됩니다. 클라이언트 드라이버는 디바이스가 사용 중인지 여부에 따라 두 설정 간에 자주 전환하려고 합니다. 이 시나리오를 구현하기 위해 클라이언트 드라이버는 선택 인터페이스 요청에 대해 설정당 하나씩 두 개의 URL을 할당할 수 있습니다. 클라이언트 드라이버는 디바이스로 보낼 소리가 있을 때 선택 인터페이스 요청에 URB를 사용하고 다시 사용하여 설정 1을 선택할 수 있습니다. 소리가 없을 때 대역폭을 절약하기 위해 클라이언트 드라이버는 다른 URB를 사용하여 설정 0으로 전환할 수 있습니다. 이 구현은 드라이버가 설정을 변경해야 할 때마다 클라이언트 드라이버가 각 선택 인터페이스 요청에 대한 URL을 할당하지 못하도록 합니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 8용 WDK가 필요합니다. Windows Vista 이상 버전의 Windows 운영 체제를 대상으로 합니다.
대상 플랫폼 바탕 화면
헤더 usbdlib.h
라이브러리 Usbdex.lib
IRQL DISPATCH_LEVEL

참고 항목

USBD_CreateHandle

USBD_SelectConfigUrbAllocateAndBuild