USBD_SelectConfigUrbAllocateAndBuild 함수(usbdlib.h)
USBD_SelectConfigUrbAllocateAndBuild 루틴은 USB 디바이스에 대한 구성을 선택하는 데 필요한 URB 구조를 할당하고 형식을 지정합니다.
구문
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 상태 코드를 반환합니다.
가능한 값은 다음 표에 나열된 상태 코드를 포함하지만 이에 국한되지 않습니다.
반환 코드 | 설명 |
---|---|
|
요청이 성공했습니다. |
|
호출자가 잘못된 매개 변수 값을 전달했습니다. USBDHandle 또는 Urb 가 NULL입니다. |
|
요청을 완료하는 데 사용할 수 있는 메모리가 부족합니다. |
설명
USBD_SelectConfigUrbAllocateAndBuild 호출하기 전에 클라이언트 드라이버는 다음 작업을 수행해야 합니다.
- 구성의 인터페이스 수를 가져옵니다. 이 정보는 ConfigurationDescriptor가 가리키는 USB_CONFIGURATION_DESCRIPTOR 구조체의 bNumInterfaces 멤버에 포함되어 있습니다.
- USBD_INTERFACE_LIST_ENTRY 구조체의 배열을 만듭니다. 배열의 요소 수는 인터페이스 수보다 하나 이상이어야 합니다. RtlZeroMemory를 호출하여 배열을 초기화합니다.
- 구성에서 각 인터페이스(또는 해당 대체 설정)에 대한 인터페이스 설명자를 가져옵니다. USBD_ParseConfigurationDescriptorEx 호출하여 이러한 인터페이스 설명자를 가져올 수 있습니다.
- 배열의 각 요소(마지막 요소 제외)에 대해 InterfaceDescriptor 멤버를 인터페이스 설명자의 주소로 설정합니다. 배열의 첫 번째 요소에 대해 InterfaceDescriptor 멤버를 구성의 첫 번째 인터페이스를 나타내는 인터페이스 설명자의 주소로 설정합니다. 마찬가지로 배열의 n번째 요소에 대해 InterfaceDescriptor 멤버를 구성의 n번째 인터페이스를 나타내는 인터페이스 설명자의 주소로 설정합니다.
- 마지막 요소의 InterfaceDescriptor 멤버를 NULL로 설정해야 합니다.
- URB를 만들고 지정된 구성, 해당 인터페이스 및 엔드포인트에 대한 정보로 채우고 요청 유형을 URB_FUNCTION_SELECT_CONFIGURATION 설정합니다.
- 각 인터페이스에 대한 URB의 USBD_INTERFACE_INFORMATION 구조를 채웁니다.
- 호출자가 제공한 USBD_INTERFACE_LIST_ENTRY 배열의 n번째 요소의 Interface 멤버를 URB의 해당 USBD_INTERFACE_INFORMATION 구조체 주소로 설정합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 WDK가 필요합니다. Windows Vista 이상 버전의 Windows 운영 체제를 대상으로 합니다. |
대상 플랫폼 | 데스크톱 |
머리글 | usbdlib.h |
라이브러리 | Usbdex.lib |
IRQL | DISPATCH_LEVEL |