WdfUsbTargetDeviceRetrieveConfigDescriptor, fonction (wdfusb.h)

[S’applique à KMDF et UMDF]

La méthode WdfUsbTargetDeviceRetrieveConfigDescriptor récupère le descripteur de configuration USB pour le périphérique USB associé à un objet de périphérique USB d’infrastructure spécifié.

Syntaxe

NTSTATUS WdfUsbTargetDeviceRetrieveConfigDescriptor(
  [in]      WDFUSBDEVICE UsbDevice,
  [out]     PVOID        ConfigDescriptor,
  [in, out] PUSHORT      ConfigDescriptorLength
);

Paramètres

[in] UsbDevice

Handle pour un objet de périphérique USB obtenu à partir d’un appel précédent à WdfUsbTargetDeviceCreateWithParameters.

[out] ConfigDescriptor

Pointeur vers une mémoire tampon allouée à l’appelant qui reçoit une structure USB_CONFIGURATION_DESCRIPTOR , suivie d’une ou plusieurs structures USB_INTERFACE_DESCRIPTOR et USB_ENDPOINT_DESCRIPTOR . Ce paramètre est facultatif et peut être NULL, auquel cas WdfUsbTargetDeviceRetrieveConfigDescriptor retourne la longueur de mémoire tampon requise. Pour plus d'informations, consultez la section Notes qui suit.

[in, out] ConfigDescriptorLength

Pointeur vers un emplacement qui fournit la longueur de la mémoire tampon vers laquelle ConfigDescriptor pointe. Si le pointeur fourni pour ConfigDescriptor est NULL, WdfUsbTargetDeviceRetrieveConfigDescriptor retourne la longueur de mémoire tampon requise à l’emplacement pointé par ConfigDescriptorLength.

Valeur retournée

WdfUsbTargetDeviceRetrieveConfigDescriptor retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :

Code de retour Description
STATUS_INVALID_DEVICE_STATE
Un descripteur de configuration n’était pas disponible pour la cible spécifiée.
STATUS_INVALID_PARAMETER
Un paramètre non valide a été détecté.
STATUS_BUFFER_TOO_SMALL
La taille de mémoire tampon spécifiée était trop petite pour les données, ou l’appelant a fourni NULL pour le paramètre ConfigDescriptor .
 

Cette méthode peut également retourner d’autres valeurs NTSTATUS.

Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.

Remarques

La méthode WdfUsbTargetDeviceRetrieveConfigDescriptor récupère toutes les informations de configuration du périphérique USB spécifiés (autrement dit, le descripteur de configuration ainsi que les descripteurs d’interface ou de point de terminaison qui peuvent être présents). Pour en savoir plus sur le format de ces informations, consultez la spécification USB.

Vous pouvez utiliser WdfUsbTargetDeviceSelectConfig pour sélectionner uniquement la première configuration USB répertoriée dans la liste des descripteurs, mais vous pouvez sélectionner plusieurs interfaces dans cette configuration unique.

Les pilotes doivent appeler WdfUsbTargetDeviceRetrieveConfigDescriptor deux fois, comme suit :

  1. Définissez le pointeur ConfigDescriptor sur NULL, afin que WdfUsbTargetDeviceRetrieveConfigDescriptor retourne la taille de mémoire tampon requise dans l’adresse vers laquelle pointe ConfigDescriptorLength .
  2. Allouez de l’espace tampon pour contenir les informations de configuration. Par exemple, un pilote peut appeler ExAllocatePoolWithTag pour allouer une mémoire tampon, ou il peut appeler WdfMemoryCreate pour créer un objet de mémoire framework.
  3. Appelez à nouveau WdfUsbTargetDeviceRetrieveConfigDescriptor , en lui passant un pointeur vers la nouvelle mémoire tampon et la taille de la mémoire tampon.
Après le deuxième appel à WdfUsbTargetDeviceRetrieveConfigDescriptor , la mémoire tampon pointée par ConfigDescriptor contient une structure USB_CONFIGURATION_DESCRIPTOR , suivie d’une ou plusieurs structures USB_INTERFACE_DESCRIPTOR et USB_ENDPOINT_DESCRIPTOR . Ces dernières structures sont organisées dans l’ordre décrit dans la spécification USB.

Pour plus d’informations sur la méthode WdfUsbTargetDeviceRetrieveConfigDescriptor et les cibles d’E/S USB, consultez Cibles d’E/S USB.

Exemples

L’exemple de code suivant appelle WdfUsbTargetDeviceRetrieveConfigDescriptor pour obtenir la taille de mémoire tampon requise, appelle WdfMemoryCreate pour créer un objet mémoire et une mémoire tampon, puis appelle À nouveau WdfUsbTargetDeviceRetrieveConfigDescriptor pour obtenir les informations de configuration d’un appareil.

USHORT  size;
NTSTATUS  ntStatus;
PMY_DEVICE_CONTEXT  myDeviceContext;
PUSB_CONFIGURATION_DESCRIPTOR  configurationDescriptor = NULL;
WDF_OBJECT_ATTRIBUTES  objectAttribs;
WDFMEMORY  memoryHandle;

myDeviceContext = GetDeviceContext(Device);

ntStatus = WdfUsbTargetDeviceRetrieveConfigDescriptor(
                                            myDeviceContext->WdfUsbTargetDevice,
                                            NULL,
                                            &size
                                            );

if (ntStatus != STATUS_BUFFER_TOO_SMALL) {
    return ntStatus;
}

WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = myDeviceContext->WdfUsbTargetDevice;

ntStatus = WdfMemoryCreate(
                           &objectAttribs,
                           NonPagedPool,
                           POOL_TAG,
                           size,
                           &memoryHandle,
                           (PVOID)&configurationDescriptor
                           );
if (!NT_SUCCESS(ntStatus)) {
    return ntStatus;
}

ntStatus = WdfUsbTargetDeviceRetrieveConfigDescriptor(
                                            myDeviceContext->WdfUsbTargetDevice,
                                            configurationDescriptor,
                                            &size
                                            );
if (!NT_SUCCESS(ntStatus)) {
    return ntStatus;
}

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfusb.h (inclure Wdfusb.h)
Bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Règles de conformité DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Voir aussi

ExAllocatePoolWithTag

USB_CONFIGURATION_DESCRIPTOR

USB_ENDPOINT_DESCRIPTOR

USB_INTERFACE_DESCRIPTOR

WdfUsbTargetDeviceCreateWithParameters

WdfUsbTargetDeviceGetDeviceDescriptor