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.
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 |
---|---|
|
La solicitud fue correcta. |
|
El autor de la llamada pasó un valor de parámetro no válido. USBDHandle o Urb es NULL. |
|
Memoria insuficiente disponible para completar la solicitud. |
Comentarios
Antes de llamar a USBD_SelectConfigUrbAllocateAndBuild, el controlador cliente debe realizar las siguientes tareas:
- 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.
- 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.
- 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.
- 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 nºelemento de la matriz, establezca el miembro InterfaceDescriptor en la dirección del descriptor de interfaz que representa la nªinterfaz de la configuración.
- El miembro InterfaceDescriptor del último elemento debe establecerse en NULL.
- 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 nº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.
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 |