WdfUsbTargetDeviceCreateIsochUrb, fonction (wdfusb.h)
[S’applique uniquement à KMDF]
La méthode WdfUsbTargetDeviceCreateIsochUrb alloue un bloc de requête USB isochronous (URB).
Syntaxe
NTSTATUS WdfUsbTargetDeviceCreateIsochUrb(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[in] ULONG NumberOfIsochPackets,
[out] WDFMEMORY *UrbMemory,
[out, optional] PURB *Urb
);
Paramètres
[in] UsbDevice
Handle vers un objet de périphérique USB obtenu à partir d’un appel précédent à WdfUsbTargetDeviceCreateWithParameters.
[in, optional] Attributes
Pointeur vers une structure WDF_OBJECT_ATTRIBUTES fournie par l’appelant qui contient des attributs pour le nouvel objet mémoire. Si le pilote fournit ce paramètre, le membre ParentObject de la structure doit être un objet de périphérique USB (WDFUSBDEVICE) ou un objet de requête (WDFREQUEST) créé par l’infrastructure, ou tout objet dont la chaîne de parents conduit à l’un de ces types. Ce paramètre est facultatif et peut être WDF_NO_OBJECT_ATTRIBUTES.
[in] NumberOfIsochPackets
Spécifie le nombre de paquets isochrones pour lesquels le système alloue de la mémoire dans l’URB.
[out] UrbMemory
Pointeur vers un emplacement typé WDFMEMORY qui reçoit un handle vers un objet mémoire de framework.
[out, optional] Urb
Pointeur vers une structure URB qui reçoit l’adresse du nouveau URB isochronous. L’infrastructure initialise le contenu de la structure URB à zéro. Ce paramètre est facultatif et peut être NULL.
Valeur de retour
WdfUsbTargetDeviceCreateIsochUrb retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :
Retourner le code | Description |
---|---|
|
Un paramètre non valide a été détecté. |
|
Le pilote n’a pas spécifié de version de contrat client lorsqu’il a appelé WDF_USB_DEVICE_CREATE_CONFIG_INIT. |
|
Mémoire insuffisante disponible. |
Cette méthode peut également retourner d’autres valeurs NTSTATUS .
Remarques
Avant d’appeler WdfUsbTargetDeviceCreateIsochUrb, un pilote doit appeler WdfUsbTargetDeviceCreateWithParameters. Si elle réussit, WdfUsbTargetDeviceCreateIsochUrb retourne un handle à un objet mémoire de framework qui décrit l’URB isochronous nouvellement alloué.
Un pilote peut appeler WdfUsbTargetDeviceCreateIsochUrb pour allouer une structure URB avant d’appeler WdfUsbTargetDeviceFormatRequestForUrb.
En règle générale, un pilote appelle WdfUsbTargetDeviceCreateIsochUrb à partir d’un gestionnaire de requêtes .
L’objet mémoire et sa mémoire tampon sont supprimés lorsque l’objet parent est supprimé. Un pilote peut également supprimer un objet mémoire et sa mémoire tampon en appelant WdfObjectDelete.
Pour plus d’informations, consultez la section Notes de WdfUsbTargetDeviceCreateUrb.
Exemples
L’exemple de code suivant est basé sur la routine PerformIsochTransfer dans l’exemple de pilote Isorwr. L’exemple appelle WdfUsbTargetDeviceCreateIsochUrb pour allouer un bloc de requête USB isochronous. L’exemple détermine le nombre d’octets requis pour contenir la demande de transfert isochronous, puis configure manuellement l’en-tête URB et les paquets isochrones dans l’URB. À ce stade, le pilote peut appeler WdfUsbTargetPipeFormatRequestForUrb, comme illustré dans l’exemple de WdfUsbTargetDeviceCreateUrb.
USBD_PIPE_HANDLE usbdPipeHandle;
ULONG numPackets = UserBufferLength/TransferSizePerFrame;
ULONG urbSize;
PURB urb;
WDFMEMORY memory;
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = UsbDevice;
status = WdfUsbTargetDeviceCreateIsochUrb(
pDevContext->WdfUsbTargetDevice,
&objectAttribs,
0,
numPackets,
&memory,
NULL
);
urb = WdfMemoryGetBuffer(urbMemory, &urbSize);
urbSize = GET_ISO_URB_SIZE(numPackets);
usbdPipeHandle = WdfUsbTargetPipeWdmGetPipeHandle(pipe);
urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(numPackets);
urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;
urb->UrbIsochronousTransfer.PipeHandle = usbdPipeHandle;
for (packetId = 0; packetId < numberOfPackets; packetId++) {
Urb-> UrbIsochronousTransfer.IsoPacket[packetId].Offset = xxx;
Urb-> UrbIsochronousTransfer.IsoPacket[packetId].YYY = yyy;
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows Vista |
plateforme cible | Universel |
version minimale de KMDF | 1.11 |
d’en-tête | wdfusb.h (include Wdfusb.h) |
bibliothèque | Wdf01000.sys (voir Versioning de la bibliothèque Framework.) |
IRQL | <=DISPATCH_LEVEL |
règles de conformité DDI | DriverCreate(kmdf) |