Partager via


WdfUsbTargetDeviceSelectConfig, fonction (wdfusb.h)

[S’applique à KMDF et UMDF]

La méthode WdfUsbTargetDeviceSelectConfig sélectionne une configuration USB pour un appareil ou désconfigure l’appareil.

Syntaxe

NTSTATUS WdfUsbTargetDeviceSelectConfig(
  [in]           WDFUSBDEVICE                         UsbDevice,
  [in, optional] PWDF_OBJECT_ATTRIBUTES               PipeAttributes,
  [in, out]      PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params
);

Paramètres

[in] UsbDevice

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

[in, optional] PipeAttributes

Pointeur vers une structure WDF_OBJECT_ATTRIBUTES allouée par l’appelant qui contient des attributs pour les nouveaux objets de canal USB d’infrastructure créés par l’infrastructure pour les interfaces de l’appareil. Pour les pilotes KMDF, ce paramètre est facultatif et peut être WDF_NO_OBJECT_ATTRIBUTES. Les pilotes UMDF doivent définir ce paramètre sur NULL.

[in, out] Params

Pointeur vers une structure WDF_USB_DEVICE_SELECT_CONFIG_PARAMS allouée par l’appelant et l’infrastructure pour spécifier les paramètres de configuration.

Valeur de retour

WdfUsbTargetDeviceSelectConfig retourne la valeur d’état d’achèvement de la cible d’E/S si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :

Retourner le code Descriptif
STATUS_INVALID_PARAMETER
Un paramètre non valide a été détecté.
STATUS_INFO_LENGTH_MISMATCH
Le membre Size de la structure WDF_USB_DEVICE_SELECT_CONFIG_PARAMS qui params points était incorrect.
STATUS_INSUFFICIENT_RESOURCES
Impossible d’allouer une mémoire tampon mémoire.
STATUS_NOT_SUPPORTED
L’infrastructure retourne cette valeur si un pilote UMDF appelle WdfUsbTargetDeviceSelectConfig avec Params->Type défini sur l’une des valeurs suivantes :
  • WdfUsbTargetDeviceSelectConfigTypeDeconfig
  • WdfUsbTargetDeviceSelectConfigTypeInterfacesDescriptor
  • WdfUsbTargetDeviceSelectConfigTypeUrb
Pour plus d’informations, consultez WdfUsbTargetDeviceSelectConfigType.
 

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

Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.

Remarques

Votre pilote peut sélectionner une configuration de périphérique à l’aide d’une structure de WDF_USB_DEVICE_SELECT_CONFIG_PARAMS pour spécifier des descripteurs USB, un URB ou des handles pour l’infrastructure d’objets d’interface USB.

L’infrastructure crée un objet de canal USB framework pour chaque canal associé à chaque interface de la configuration, après la suppression d’objets de canal que l’infrastructure a pu créer précédemment pour la configuration. L’infrastructure utilise un paramètre de remplacement zéro pour chaque interface, sauf si le pilote spécifie un autre paramètre.

Pour obtenir des informations sur les objets de canal d’une interface, le pilote peut appeler WdfUsbInterfaceGetNumConfiguredPipes et WdfUsbInterfaceGetConfiguredPipe.

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

attention  

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.

 

Exemples

L’exemple de code suivant sélectionne une configuration avec une seule interface spécifiée.

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS  configParams;
NTSTATUS  status;

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&configParams);

status = WdfUsbTargetDeviceSelectConfig(
                                        UsbDevice,
                                        WDF_NO_OBJECT_ATTRIBUTES,
                                        &configParams
                                        );

L’exemple de code suivant sélectionne une configuration avec plusieurs interfaces, en utilisant un autre paramètre zéro sur toutes les interfaces. Cet exemple s’applique uniquement aux pilotes KMDF.

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS  configParams;
PWDF_USB_INTERFACE_SETTING_PAIR settingPairs;
UCHAR numInterfaces;
NTSTATUS  status;

numInterfaces = WdfUsbTargetDeviceGetNumInterfaces(UsbDevice);

settingPairs = ExAllocatePoolWithTag(
    PagedPool,
    sizeof(WDF_USB_INTERFACE_SETTING_PAIR) * numInterfaces,
    MY_DRIVER_TAG
);

if (settingPairs == NULL){
    return STATUS_INSUFFICIENT_RESOURCES;
}

for (interfaceIndex = 0; interfaceIndex < numInterfaces; interfaceIndex++) {
        
    settingPairs[interfaceIndex].UsbInterface = 
                                    WdfUsbTargetDeviceGetInterface(
                                        UsbDevice,
                                        interfaceIndex);

    // Select alternate setting zero on all interfaces.
       
    settingPairs[interfaceIndex].SettingIndex = 0;
}

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
    &configParams,
    numInterfaces,
    settingPairs
);

status = WdfUsbTargetDeviceSelectConfig(
    UsbDevice,
    NULL,
    &configParams
);

if (settingPairs != NULL) {
    ExFreePoolWithTag(
        settingPairs,
        MY_DRIVER_TAG
    );
    return status;
}

Exigences

Exigence Valeur
plateforme cible Universel
version minimale de KMDF 1,0
version minimale de UMDF 2.0
d’en-tête wdfusb.h (include 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), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Voir aussi

WDF_OBJECT_ATTRIBUTES

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE

WdfUsbInterfaceGetConfiguredPipe

WdfUsbInterfaceGetNumConfiguredPipes

WdfUsbTargetDeviceCreateWithParameters