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