USBD_UrbAllocate fonction (usbdlib.h)
La routine USBD_UrbAllocate alloue un bloc de requête USB (URB).
Syntaxe
NTSTATUS USBD_UrbAllocate(
[in] USBD_HANDLE USBDHandle,
[out] PURB *Urb
);
Paramètres
[in] USBDHandle
Poignée USBD récupérée par le pilote client lors d’un appel précédent à la routine USBD_CreateHandle .
[out] Urb
Pointeur vers la structure URB nouvellement allouée. Tous les membres de la structure sont définis sur zéro. Le pilote client doit libérer l’URB lorsque le pilote a terminé de l’utiliser en appelant USBD_UrbFree.
Valeur retournée
La routine USBD_UrbAllocate retourne STATUS_SUCCESS si la demande réussit. Sinon, USBD_UrbAllocate définit Urb sur NULL et retourne un code d’échec.
Les valeurs possibles incluent, sans s’y limiter, STATUS_INVALID_PARAMETER, qui indique que l’appelant a passé la valeur NULL à USBDHandle ou Urb.
Remarques
La routine USBD_UrbAllocate permet à la pile de pilotes USB sous-jacente d’allouer un contexte URB opaque pour l’URB. En utilisant le contexte URB, la pile de pilotes USB peut traiter les requêtes de manière plus efficace et fiable. Ces optimisations sont fournies par la pile de pilotes USB 3.0 incluse dans Windows 8. Le pilote client ne peut pas accéder au contexte URB ; le contexte est utilisé en interne par le pilote de bus.
Quelle que soit la version du protocole USB du contrôleur hôte, la pile de pilotes USB sous-jacente, le système d’exploitation cible, le pilote client doit toujours appeler USBD_UrbAllocate pour allouer une structure URB . USBD_UrbAllocate remplace les mécanismes d’allocation antérieurs, tels que ExAllocatePoolWithTag, ou leur allocation sur la pile.
Le pilote client ne doit pas utiliser USBD_UrbAllocate,
- Pour allouer un URB dont la longueur est variable, comme un URB pour un transfert isochronieux. Au lieu de cela, le pilote client doit appeler USBD_IsochUrbAllocate.
- Si le système d’exploitation cible est Windows XP avec Service Pack 2 (SP2) ou une version antérieure de Windows.
Vous devez appeler USBD_UrbFree pour libérer l’URB alloué par USBD_UrbAllocate.
Exemples
L’exemple de code suivant montre comment allouer, envoyer et libérer un URB. L’exemple envoie l’URB de manière synchrone. Pour l’implémentation de la fonction SubmitUrbSync, consultez l’exemple de section dans Comment envoyer un URB.
NTSTATUS CreateandSubmitURBSynchronously (
_In_ USBD_HANDLE USBDHandle
{
PURB Urb = NULL;
NTSTATUS status;
status = USBD_UrbAllocate(USBDHandle, &Urb);
if (!NT_SUCCESS(status))
{
goto CreateandSubmitURBExit;
}
//Format the URB for the request. Not Shown.
status = BuildURBForBulkTransfer (Urb);
if (!NT_SUCCESS(status))
{
goto CreateandSubmitURBExit;
}
status = SubmitUrbSync( TargetDeviceObject,
Urb)
if (!NT_SUCCESS(status))
{
goto CreateandSubmitURBExit;
}
CreateandSubmitURBExit:
if (Urb)
{
USBD_UrbFree( USBDHandle, Urb);
}
return status;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Nécessite WDK pour Windows 8. Cible Windows Vista et les versions ultérieures du système d’exploitation Windows. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | usbdlib.h |
Bibliothèque | Usbdex.lib |
IRQL | DISPATCH_LEVEL |
Voir aussi
Allocation et génération d’URBs