다음을 통해 공유


USBD_SelectConfigUrbAllocateAndBuild 함수(usbdlib.h)

USBD_SelectConfigUrbAllocateAndBuild 루틴은 USB 디바이스에 대한 구성을 선택하는 데 필요한 URB 구조를 할당하고 형식을 지정합니다.

참고 Windows 8 USBD_SelectConfigUrbAllocateAndBuildUSBD_CreateConfigurationRequestExUSBD_CreateConfigurationRequest 대체합니다.
 

구문

NTSTATUS USBD_SelectConfigUrbAllocateAndBuild(
  [in]  USBD_HANDLE                   USBDHandle,
  [in]  PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
  [in]  PUSBD_INTERFACE_LIST_ENTRY    InterfaceList,
  [out] PURB                          *Urb
);

매개 변수

[in] USBDHandle

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

[in] ConfigurationDescriptor

선택할 구성에 대한 구성 설명자가 포함된 호출자가 할당한 USB_CONFIGURATION_DESCRIPTOR 구조체에 대한 포인터입니다. 일반적으로 클라이언트 드라이버는 URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 형식의 URB( _URB_CONTROL_DESCRIPTOR_REQUEST 참조)를 제출하여 USB 디바이스에서 구성, 인터페이스, 엔드포인트, 공급업체 및 클래스별 설명자에 대한 정보를 검색합니다. 클라이언트 드라이버가 USB_CONFIGURATION_DESCRIPTOR_TYPE 설명자 유형으로 지정하면 요청은 USB_CONFIGURATION_DESCRIPTOR 구조의 모든 디바이스 정보를 검색합니다. 그런 다음 드라이버는 받은 포인터를 ConfigurationDescriptor 매개 변수의 USB_CONFIGURATION_DESCRIPTOR 구조체에 전달합니다.

[in] InterfaceList

호출자가 할당한 USBD_INTERFACE_LIST_ENTRY 구조체 배열의 첫 번째 요소에 대한 포인터입니다. 배열의 길이는 구성 설명자의 인터페이스 수에 따라 달라집니다. 자세한 내용은 설명 부분을 참조하세요.

[out] Urb

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

반환 값

USBD_SelectConfigUrbAllocateAndBuild 루틴은 NT 상태 코드를 반환합니다.

가능한 값은 다음 표에 나열된 상태 코드를 포함하지만 이에 국한되지 않습니다.

반환 코드 설명
STATUS_SUCCESS
요청이 성공했습니다.
STATUS_INVALID_PARAMETER
호출자가 잘못된 매개 변수 값을 전달했습니다. USBDHandle 또는 Urb 가 NULL입니다.
STATUS_INSUFFICIENT_RESOURCES
요청을 완료하는 데 사용할 수 있는 메모리가 부족합니다.

설명

USBD_SelectConfigUrbAllocateAndBuild 호출하기 전에 클라이언트 드라이버는 다음 작업을 수행해야 합니다.

  1. 구성의 인터페이스 수를 가져옵니다. 이 정보는 ConfigurationDescriptor가 가리키는 USB_CONFIGURATION_DESCRIPTOR 구조체의 bNumInterfaces 멤버에 포함되어 있습니다.
  2. USBD_INTERFACE_LIST_ENTRY 구조체의 배열을 만듭니다. 배열의 요소 수는 인터페이스 수보다 하나 이상이어야 합니다. RtlZeroMemory를 호출하여 배열을 초기화합니다.
  3. 구성에서 각 인터페이스(또는 해당 대체 설정)에 대한 인터페이스 설명자를 가져옵니다. USBD_ParseConfigurationDescriptorEx 호출하여 이러한 인터페이스 설명자를 가져올 수 있습니다.
  4. 배열의 각 요소(마지막 요소 제외)에 대해 InterfaceDescriptor 멤버를 인터페이스 설명자의 주소로 설정합니다. 배열의 첫 번째 요소에 대해 InterfaceDescriptor 멤버를 구성의 첫 번째 인터페이스를 나타내는 인터페이스 설명자의 주소로 설정합니다. 마찬가지로 배열의 n번째 요소에 대해 InterfaceDescriptor 멤버를 구성의 n번째 인터페이스를 나타내는 인터페이스 설명자의 주소로 설정합니다.
  5. 마지막 요소의 InterfaceDescriptor 멤버를 NULL로 설정해야 합니다.
USBD_SelectConfigUrbAllocateAndBuild 다음 작업을 수행합니다. URB 구조에 대해 수신된 포인터를 사용하여 USB 드라이버 스택에 선택 구성 요청을 제출하여 지정된 구성을 설정할 수 있습니다. 또한 배열에서 각 USBD_INTERFACE_INFORMATION 구조체의 인터페이스 멤버를 사용하여 인터페이스에 대한 정보를 가져올 수 있습니다. 각 USBD_INTERFACE_INFORMATION 구조 내에서 파이프 멤버는 USBD_PIPE_INFORMATION 구조체의 배열입니다. 각 USBD_PIPE_INFORMATION 구조에는 해당 인터페이스의 엔드포인트에 대해 열린 파이프(USB 드라이버 스택에 의해)에 대한 정보가 포함됩니다. 배열에서 파이프 핸들을 가져와 디바이스에 대한 향후 I/O 요청을 위해 저장할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 WDK가 필요합니다. Windows Vista 이상 버전의 Windows 운영 체제를 대상으로 합니다.
대상 플랫폼 데스크톱
머리글 usbdlib.h
라이브러리 Usbdex.lib
IRQL DISPATCH_LEVEL

추가 정보

USBD_CreateConfigurationRequestEx

USBD_CreateHandle