Função USBD_SelectConfigUrbAllocateAndBuild (usbdlib.h)
A rotina USBD_SelectConfigUrbAllocateAndBuild aloca e formata uma estrutura URB necessária para selecionar uma configuração para um dispositivo USB.
Sintaxe
NTSTATUS USBD_SelectConfigUrbAllocateAndBuild(
[in] USBD_HANDLE USBDHandle,
[in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
[in] PUSBD_INTERFACE_LIST_ENTRY InterfaceList,
[out] PURB *Urb
);
Parâmetros
[in] USBDHandle
Identificador USBD recuperado pelo driver cliente em uma chamada anterior para a rotina de USBD_CreateHandle .
[in] ConfigurationDescriptor
Ponteiro para uma estrutura de USB_CONFIGURATION_DESCRIPTOR alocada pelo chamador que contém o descritor de configuração para a configuração a ser selecionada. Normalmente, o driver cliente envia um URB do tipo URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE (consulte _URB_CONTROL_DESCRIPTOR_REQUEST) para recuperar informações sobre configurações, interfaces, pontos de extremidade, fornecedor e descritores específicos de classe de um dispositivo USB. Quando o driver do cliente especifica USB_CONFIGURATION_DESCRIPTOR_TYPE como o tipo de descritor, a solicitação recupera todas as informações do dispositivo em uma estrutura USB_CONFIGURATION_DESCRIPTOR . Em seguida, o driver passa o ponteiro recebido para a estrutura USB_CONFIGURATION_DESCRIPTOR no parâmetro ConfigurationDescriptor .
[in] InterfaceList
Ponteiro para o primeiro elemento de uma matriz alocada pelo chamador de estruturas de USBD_INTERFACE_LIST_ENTRY . O comprimento da matriz depende do número de interfaces no descritor de configuração. Para obter mais informações, consulte Comentários.
[out] Urb
Ponteiro para uma estrutura URB que recebe o URB alocado por USBD_SelectConfigUrbAllocateAndBuild. O driver cliente deve liberar o URB quando o driver terminar de usá-lo chamando USBD_UrbFree.
Retornar valor
A rotina USBD_SelectConfigUrbAllocateAndBuild retorna um código de status NT.
Os valores possíveis incluem, mas não se limitam a, os códigos de status listados na tabela a seguir.
Código de retorno | Descrição |
---|---|
|
A solicitação foi bem-sucedida. |
|
O chamador passou um valor de parâmetro inválido. USBDHandle ou Urb é NULL. |
|
Memória insuficiente disponível para concluir a solicitação. |
Comentários
Antes de chamar USBD_SelectConfigUrbAllocateAndBuild, o driver do cliente deve executar as seguintes tarefas:
- Obtenha o número de interfaces na configuração. Essas informações estão contidas no membro bNumInterfaces da estrutura USB_CONFIGURATION_DESCRIPTOR apontada por ConfigurationDescriptor.
- Crie uma matriz de estruturas USBD_INTERFACE_LIST_ENTRY . O número de elementos na matriz deve ser um a mais do que o número de interfaces. Inicialize a matriz chamando RtlZeroMemory.
- Obtenha um descritor de interface para cada interface (ou sua configuração alternativa) na configuração. Você pode obter esses descritores de interface chamando USBD_ParseConfigurationDescriptorEx.
- Para cada elemento (exceto o último elemento) na matriz, defina o membro InterfaceDescriptor como o endereço de um descritor de interface. Para o primeiro elemento na matriz, defina o membro InterfaceDescriptor como o endereço do descritor de interface que representa a primeira interface na configuração. Da mesma forma para o nth elemento na matriz, defina o membro InterfaceDescriptor como o endereço do descritor de interface que representa a nth interface na configuração.
- O membro InterfaceDescriptor do último elemento deve ser definido como NULL.
- Cria um URB e o preenche com informações sobre a configuração especificada, suas interfaces e pontos de extremidade e define o tipo de solicitação como URB_FUNCTION_SELECT_CONFIGURATION.
- Preenche uma estrutura USBD_INTERFACE_INFORMATION na URB para cada interface.
- Define o membro Interface do nºelemento da matriz de USBD_INTERFACE_LIST_ENTRY fornecida pelo chamador para o endereço da estrutura de USBD_INTERFACE_INFORMATION correspondente na URB.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Requer WDK para Windows 8. Tem como destino o Windows Vista e versões posteriores do sistema operacional Windows. |
Plataforma de Destino | Área de Trabalho |
Cabeçalho | usbdlib.h |
Biblioteca | Usbdex.lib |
IRQL | DISPATCH_LEVEL |