Compartir a través de


función USBD_SelectConfigUrbAllocateAndBuild (usbdlib.h)

La rutina USBD_SelectConfigUrbAllocateAndBuild asigna y da formato a una estructura URB necesaria para seleccionar una configuración para un dispositivo USB.

Nota En Windows 8, USBD_SelectConfigUrbAllocateAndBuild reemplaza USBD_CreateConfigurationRequestEx y USBD_CreateConfigurationRequest.
 

Sintaxis

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 por el controlador cliente en una llamada anterior a la rutina USBD_CreateHandle .

[in] ConfigurationDescriptor

Puntero a una estructura de USB_CONFIGURATION_DESCRIPTOR asignada por el autor de la llamada que contiene el descriptor de configuración para la configuración que se va a seleccionar. Normalmente, el controlador cliente envía un URB del tipo URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE (consulte _URB_CONTROL_DESCRIPTOR_REQUEST) para recuperar información sobre configuraciones, interfaces, puntos de conexión, el proveedor y descriptores específicos de clase desde un dispositivo USB. Cuando el controlador de cliente especifica USB_CONFIGURATION_DESCRIPTOR_TYPE como tipo de descriptor, la solicitud recupera toda la información del dispositivo en una estructura de USB_CONFIGURATION_DESCRIPTOR . A continuación, el controlador pasa el puntero recibido a la estructura USB_CONFIGURATION_DESCRIPTOR en el parámetro ConfigurationDescriptor .

[in] InterfaceList

Puntero al primer elemento de una matriz asignada por el autor de la llamada de USBD_INTERFACE_LIST_ENTRY estructuras. La longitud de la matriz depende del número de interfaces del descriptor de configuración. Para obtener más información, vea la sección Comentarios.

[out] Urb

Puntero a una estructura URB que recibe el URB asignado por USBD_SelectConfigUrbAllocateAndBuild. El controlador cliente debe liberar el URB cuando el controlador haya terminado de usarlo llamando a USBD_UrbFree.

Valor devuelto

La rutina USBD_SelectConfigUrbAllocateAndBuild devuelve un código de estado NT.

Entre los valores posibles se incluyen, entre otros, los códigos de estado enumerados en la tabla siguiente.

Código devuelto Descripción
STATUS_SUCCESS
La solicitud fue correcta.
STATUS_INVALID_PARAMETER
El autor de la llamada pasó un valor de parámetro no válido. USBDHandle o Urb es NULL.
STATUS_INSUFFICIENT_RESOURCES
Memoria insuficiente disponible para completar la solicitud.

Comentarios

Antes de llamar a USBD_SelectConfigUrbAllocateAndBuild, el controlador cliente debe realizar las siguientes tareas:

  1. Obtenga el número de interfaces de la configuración. Esta información se incluye en el miembro bNumInterfaces de la estructura USB_CONFIGURATION_DESCRIPTOR a la que apunta ConfigurationDescriptor.
  2. Cree una matriz de estructuras de USBD_INTERFACE_LIST_ENTRY . El número de elementos de la matriz debe ser uno más que el número de interfaces. Inicialice la matriz llamando a RtlZeroMemory.
  3. Obtenga un descriptor de interfaz para cada interfaz (o su valor alternativo) en la configuración. Puede obtener esos descriptores de interfaz llamando a USBD_ParseConfigurationDescriptorEx.
  4. Para cada elemento (excepto el último elemento) de la matriz, establezca el miembro InterfaceDescriptor en la dirección de un descriptor de interfaz. Para el primer elemento de la matriz, establezca el miembro InterfaceDescriptor en la dirección del descriptor de interfaz que representa la primera interfaz de la configuración. Del mismo modo, para el elemento de la matriz, establezca el miembro InterfaceDescriptor en la dirección del descriptor de interfaz que representa la interfaz de la configuración.
  5. El miembro InterfaceDescriptor del último elemento debe establecerse en NULL.
USBD_SelectConfigUrbAllocateAndBuild realiza las siguientes tareas:
  • Crea un URB y lo rellena con información sobre la configuración especificada, sus interfaces y puntos de conexión, y establece el tipo de solicitud en URB_FUNCTION_SELECT_CONFIGURATION.
  • Rellena una estructura de USBD_INTERFACE_INFORMATION en el URB para cada interfaz.
  • Establece el miembro Interface del elemento del USBD_INTERFACE_LIST_ENTRY proporcionado por el autor de la llamada en la dirección de la estructura de USBD_INTERFACE_INFORMATION correspondiente en el URB.
Puede usar el puntero recibido a la estructura URB para enviar una solicitud de configuración de selección a la pila del controlador USB para establecer la configuración especificada. Además, puede usar el miembro Interface de cada estructura USBD_INTERFACE_INFORMATION de la matriz para obtener información sobre la interfaz. Dentro de cada estructura USBD_INTERFACE_INFORMATION , el miembro Pipes es una matriz de estructuras de USBD_PIPE_INFORMATION . Cada estructura de USBD_PIPE_INFORMATION contiene información sobre las canalizaciones abiertas (por la pila de controladores USB) para los puntos de conexión de esa interfaz. Puede obtener identificadores de canalización de la matriz y almacenarlos para futuras solicitudes de E/S en el dispositivo.

Requisitos

Requisito Value
Cliente mínimo compatible Requiere WDK para Windows 8. Tiene como destino Windows Vista y versiones posteriores del sistema operativo Windows.
Plataforma de destino Escritorio
Encabezado usbdlib.h
Library Usbdex.lib
IRQL DISPATCH_LEVEL

Consulte también

USBD_CreateConfigurationRequestEx

USBD_CreateHandle