Función WdfUsbTargetDeviceCreateUrb (wdfusb.h)
[Solo se aplica a KMDF]
El método WdfUsbTargetDeviceCreateUrb asigna un bloque de solicitud USB (URB).
Sintaxis
NTSTATUS WdfUsbTargetDeviceCreateUrb(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFMEMORY *UrbMemory,
[out, optional] PURB *Urb
);
Parámetros
[in] UsbDevice
Identificador de un objeto de dispositivo USB obtenido de una llamada anterior a WdfUsbTargetDeviceCreateWithParameters.
[in, optional] Attributes
Puntero a una estructura de WDF_OBJECT_ATTRIBUTES proporcionada por el autor de la llamada que contiene atributos para el nuevo objeto de memoria. Si el controlador proporciona este parámetro, el miembro ParentObject de la estructura debe ser un objeto de dispositivo USB (WDFUSBDEVICE) o un objeto de solicitud (WDFREQUEST) creado por el marco, o cualquier objeto cuya cadena de elementos primarios conduce a uno de estos tipos. Este parámetro es opcional y se puede WDF_NO_OBJECT_ATTRIBUTES.
[out] UrbMemory
Puntero a una ubicación con tipo WDFMEMORY que recibe un identificador para un objeto de memoria de marco.
[out, optional] Urb
Puntero a una estructura URB que recibe la dirección del URB recién asignado. Este parámetro es opcional y puede ser NULL.
Valor devuelto
WdfUsbTargetDeviceCreateUrb devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método puede devolver uno de los valores siguientes:
Código devuelto | Descripción |
---|---|
|
Se ha detectado un parámetro no válido. |
|
El controlador no especificó una versión de contrato de cliente cuando llamó a WDF_USB_DEVICE_CREATE_CONFIG_INIT. |
|
No había memoria suficiente para crear un nuevo URB. |
Este método también podría devolver otros valores NTSTATUS.
Comentarios
Antes de llamar a WdfUsbTargetDeviceCreateUrb, un controlador debe llamar a WdfUsbTargetDeviceCreateWithParameters. Si se ejecuta correctamente, WdfUsbTargetDeviceCreateUrb devuelve un identificador a un objeto de memoria de marco que describe el URB recién asignado. Normalmente, un controlador llama a WdfUsbTargetDeviceCreateUrb desde un controlador de solicitudes.
Un controlador puede llamar a WdfUsbTargetDeviceCreateUrb para asignar una estructura URB antes de llamar a WdfUsbTargetDeviceFormatRequestForUrb.
WdfUsbTargetDeviceCreateUrb es similar en funcionamiento a WdfMemoryCreate. Ambos métodos asignan un objeto de memoria de marco y ambos métodos también proporcionan la opción de recibir el búfer (en este caso, el URB) asociado al objeto de memoria. En ambos casos, el autor de la llamada también puede recuperar el búfer más adelante llamando a WdfMemoryGetBuffer.
Si el controlador proporciona un parámetro Urb cuando llama a WdfUsbTargetDeviceCreateUrb, puede dar formato manualmente al URB o mediante una llamada a las rutinas UsbBuildXxx.
El objeto de memoria y su búfer se eliminan cuando se elimina el objeto primario. Un controlador también puede eliminar un objeto de memoria y su búfer llamando a WdfObjectDelete.
Ejemplos
En el ejemplo de código siguiente se declara un objeto de memoria de marco. En el ejemplo se llama a WdfUsbTargetDeviceCreateUrb para asignar un bloque de solicitud USB y, a continuación, llama a WdfUsbTargetDeviceFormatRequestForUrb para dar formato a una solicitud que use el contenido de la estructura URB. Por último, el ejemplo registra una función de devolución de llamada CompletionRoutine y envía la solicitud a un destino de E/S.
WDFMEMORY memory;
PURB urb = NULL;
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = UsbDevice;
status = WdfUsbTargetDeviceCreateUrb(
pDevContext->WdfUsbTargetDevice,
&objectAttribs,
&memory,
&urb);
status = WdfUsbTargetDeviceFormatRequestForUrb(
deviceContext->WdfUsbTargetDevice,
request,
memory,
NULL);
WdfRequestSetCompletionRoutine(
request,
MyCompletionRoutine,
NULL);
if (!WdfRequestSend(
request,
WdfUsbTargetDeviceGetIoTarget(UsbDevice),
NULL)) {
status = WdfRequestGetStatus(request);
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.11 |
Encabezado | wdfusb.h (incluya Wdfusb.h) |
Library | Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos). |
IRQL | <=DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | DriverCreate(kmdf) |
Consulte también
WDF_USB_DEVICE_CREATE_CONFIG_INIT
WdfUsbTargetDeviceCreateIsochUrb