다음을 통해 공유


USBD_CreateConfigurationRequestEx 함수(usbdlib.h)

USBD_CreateConfigurationRequestEx 루틴은 URB를 할당하고 포맷하여 USB 디바이스에 대한 구성을 선택합니다.

USBD_CreateConfigurationRequestExUSBD_CreateConfigurationRequest 대체합니다.

구문

PURB USBD_CreateConfigurationRequestEx(
  [in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
  [in] PUSBD_INTERFACE_LIST_ENTRY    InterfaceList
);

매개 변수

[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 구조체 배열의 첫 번째 요소에 대한 포인터입니다. 배열의 길이는 구성 설명자의 인터페이스 수에 따라 달라집니다. 배열의 요소 수는 구성의 인터페이스 수보다 하나 이상이어야 합니다. RtlZeroMemory를 호출하여 배열을 초기화합니다. 배열의 마지막 요소에 대한 InterfaceDescriptor 멤버를 NULL로 설정해야 합니다.

반환 값

USBD_CreateConfigurationRequestExURB 구조를 할당하고, URB_FUNCTION_SELECT_CONFIGURATION 요청(select-configuration 요청)에 대한 형식을 지정하고 URB에 대한 포인터를 반환합니다. 그런 다음 클라이언트 드라이버는 반환된 URB 를 사용하여 선택 구성 요청을 호스트 컨트롤러 드라이버에 보내 구성을 설정할 수 있습니다. URB 사용을 마쳤으면 URB 를 해제해야 합니다.

설명

select-configuration 요청 및 코드 예제를 빌드하는 방법에 대한 자세한 내용은 USB 디바이스에 대한 구성을 선택하는 방법을 참조하세요.

반환된 값은 지정된 구성을 설정하기 위해 호스트 컨트롤러 드라이버에 select-configuration 요청을 제출하는 데 사용할 수 있는 URB 구조체에 대한 포인터입니다.

USB 드라이버 스택이 select-configuration 요청을 완료한 후 USBD_INTERFACE_INFORMATION 구조를 검사할 수 있습니다. USBD_INTERFACE_INFORMATION파이프 멤버는 USBD_PIPE_INFORMATION 구조체의 배열을 가리킵니다. USB 버스 드라이버는 인터페이스의 엔드포인트와 연결된 파이프에 대한 정보로 USBD_PIPE_INFORMATION 구조체의 배열을 채웁니다. 클라이언트 드라이버는 에서 Pipes[i].PipeHandle 파이프 핸들을 가져오고 이를 사용하여 특정 파이프에 I/O 요청을 보낼 수 있습니다.

반환된 URB를 사용하여 모든 작업을 완료한 후에는 ExFreePool을 호출하여 URB를 해제해야 합니다.

비페이지 또는 페이징 풀에서 구성 설명자와 배열을 할당할 수 있습니다. ConfigurationDescriptorInterfaceList가 가리키는 메모리가 비페이지 풀에서 할당된 경우 이 루틴의 호출자는 IRQL <= DISPATCH_LEVEL 실행할 수 있습니다. 그렇지 않으면 호출자는 IRQL < DISPATCH_LEVEL 실행해야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 usbdlib.h(Usbdlib.h 포함)
라이브러리 Usbd.lib
IRQL DISPATCH_LEVEL(설명 참조)

추가 정보

USB 디바이스에 대한 구성을 선택하는 방법

USB 디바이스 드라이버 프로그래밍 참조

USBD_INTERFACE_INFORMATION

_URB_SELECT_CONFIGURATION