función USBD_CreateHandle (usbdlib.h)
Un controlador de cliente USB WDM llama a la rutina USBD_CreateHandle para obtener un identificador USBD. La rutina registra el controlador cliente con la pila de controladores USB subyacente.
Nota para controladores de Windows Driver Framework (WDF): Si el controlador de cliente es un controlador basado en WDF, no necesita el controlador USBD. El controlador cliente se registra en su llamada al método WdfUsbTargetDeviceCreateWithParameters .
Sintaxis
NTSTATUS USBD_CreateHandle(
[in] PDEVICE_OBJECT DeviceObject,
[in] PDEVICE_OBJECT TargetDeviceObject,
[in] ULONG USBDClientContractVersion,
[in] ULONG PoolTag,
[out] USBD_HANDLE *USBDHandle
);
Parámetros
[in] DeviceObject
Puntero al objeto de dispositivo para el controlador cliente.
[in] TargetDeviceObject
Puntero al siguiente objeto de dispositivo inferior de la pila de dispositivos. El controlador cliente recibe un puntero a ese objeto de dispositivo en una llamada anterior a IoAttachDeviceToDeviceStack.
[in] USBDClientContractVersion
La versión del contrato que admite el controlador cliente. USBDClientContractVersion debe ser USBD_CLIENT_CONTRACT_VERSION_602. Para obtener más información, vea la sección Comentarios.
[in] PoolTag
Etiqueta de grupo usada para las asignaciones de memoria.
[out] USBDHandle
Identificador opaco que indica que el controlador cliente se registró con la pila de controladores USB. Para obtener más información, vea la sección Comentarios.
Valor devuelto
La rutina devuelve un código NTSTATUS. Entre los valores posibles se incluyen, entre otros, estos valores en la tabla siguiente.
Código devuelto | Descripción |
---|---|
|
La llamada de rutina se realizó correctamente. |
|
El autor de la llamada no se ejecuta en el valor IRQL PASSIVE_LEVEL. |
|
El autor de la llamada pasó uno de los siguientes valores de parámetro no válidos:
|
Comentarios
Registro de versiones
Windows 8 incluye una nueva pila de controladores USB para admitir dispositivos USB 3.0. La nueva pila de controladores USB proporciona varias funcionalidades nuevas, como compatibilidad con secuencias, MDL encadenadas, etc. Para que el controlador cliente pueda usar cualquiera de esas funcionalidades USB, debe registrar el controlador cliente con la pila de controladores USB y obtener un controlador USBD. El identificador es necesario para llamar a rutinas que usan o configuran las nuevas funcionalidades. Para obtener un identificador USBD, llame a USBD_CreateHandle.El controlador cliente debe llamar a USBD_CreateHandle independientemente de si el dispositivo está conectado a un controlador de host USB 3.0, 2.0 o 1.1. Si el dispositivo está conectado a un controlador host USB 3.0, Windows carga la pila de controladores USB 3.0. De lo contrario, se carga la pila de controladores USB 2.0. En cualquier caso, no es necesario que el controlador cliente conozca la versión compatible con la pila de controladores USB subyacente. USBD_CreateHandle evalúa la versión de la pila de controladores y asigna los recursos de forma adecuada.
El controlador cliente debe especificar USBD_CLIENT_CONTRACT_VERSION_602 en el parámetro USBDClientContractVersion y seguir el conjunto de reglas descritas en Procedimientos recomendados: Uso de direcciones URL.
Llamar a USBD_CreateHandle
El controlador cliente del modelo de controlador de Windows (WDM) debe llamar a la rutina USBD_CreateHandle antes de que el controlador envíe cualquier otra solicitud, a través de direcciones URL o IOCTLs, a la pila del controlador USB. Normalmente, el controlador cliente obtiene el identificador USBD en su rutina AddDevice.No es necesario que un controlador cliente de Windows Driver Frameworks (WDF) llame a USBD_CreateHandle porque el marco llama a esta rutina en nombre del controlador cliente durante la fase de inicialización del dispositivo. En su lugar, el controlador cliente puede especificar su versión del contrato de cliente en la estructura WDF_USB_DEVICE_CREATE_CONFIG y pasarla a la llamada a WdfUsbTargetDeviceCreateWithParameters.
finalización de llamadas de USBD_CreateHandle
Si la llamada USBD_CreateHandle se realiza correctamente, se obtiene un identificador USBD válido en el parámetro USBDHandle . El controlador cliente debe usar el controlador USBD en las futuras solicitudes del controlador cliente a la pila de controladores USB.Si se produce un error en la llamada USBD_CreateHandle , el controlador cliente puede producir un error en la rutina AddDevice.
Una vez que el controlador cliente haya terminado de usar el controlador USBD, el controlador debe cerrar el identificador llamando a la rutina de USBD_CloseHandle .
Ejemplos
En el código de ejemplo siguiente se muestra cómo registrar un controlador de cliente llamando a USBD_CreateHandle.
DRIVER_ADD_DEVICE MyAddDevice;
NTSTATUS MyAddDevice( __in PDRIVER_OBJECT DriverObject,
__in PDEVICE_OBJECT PhysicalDeviceObject)
{
NTSTATUS ntStatus;
PDEVICE_OBJECT deviceObject;
PDEVICE_EXTENSION deviceExtension;
PDEVICE_OBJECT stackDeviceObject;
USBD_HANDLE usbdHandle;
...
ntStatus = IoCreateDevice(DriverObject,
sizeof(DEVICE_EXTENSION),
NULL,
FILE_DEVICE_UNKNOWN,
FILE_AUTOGENERATED_DEVICE_NAME,
FALSE,
&deviceObject);
if (!NT_SUCCESS(ntStatus))
{
return ntStatus;
}
...
// Attach the FDO to the top of the PDO in the client driver's
// device stack.
deviceExtension->StackDeviceObject = IoAttachDeviceToDeviceStack (
deviceObject,
PhysicalDeviceObject);
...
// Initialize the DeviceExtension
deviceExtension = deviceObject->DeviceExtension;
...
//Register the client driver with the USB driver stack.
//Obtain a USBD handle for registration.
ntStatus = USBD_CreateHandle(deviceObject,
deviceExtension->StackDeviceObject,
USBD_CLIENT_CONTRACT_VERSION_602,
POOL_TAG,
&deviceExtension->USBDHandle);
if (!NT_SUCCESS(ntStatus))
{
return ntStatus;
}
...
// Call USBD_QueryUsbCapability to determine
// stream support.
ntStatus = USBD_QueryUsbCapability ( deviceExtension->USBDHandle,
(GUID*)&GUID_USB_CAPABILITY_STATIC_STREAMS,
sizeof(ULONG),
(PUCHAR) &deviceExtension.MaxSupportedStreams);
if (!NT_SUCCESS(ntStatus))
{
deviceExtension->MaxSupportedStreams = 0;
ntStatus = STATUS_SUCCESS;
}
...
}
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 (include usbdlib.h, usb.h) |
Library | Usbdex.lib; Ntstrsafe.lib |
IRQL | PASSIVE_LEVEL |
Consulte también
Asignar y compilar direcciones URL