Fonction UrsDeviceInitialize (ursdevice.h)

Initialise un objet d’appareil framework pour prendre en charge les opérations liées à un contrôleur à double rôle USB et enregistre les fonctions de rappel d’événements pertinentes avec l’extension de classe contrôleur à double rôle USB.

Syntaxe

NTSTATUS UrsDeviceInitialize(
  [in] WDFDEVICE   Device,
  [in] PURS_CONFIG Config
);

Paramètres

[in] Device

Handle de l’objet d’appareil framework que le pilote client a récupéré lors de l’appel précédent à WdfDeviceCreate.

[in] Config

Pointeur vers une structure URS_CONFIG que le pilote client a initialisée en appelant URS_CONFIG_INIT.

Valeur retournée

La méthode retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner un code d’erreur NTSTATUS approprié.

Remarques

Le pilote client du contrôleur double rôle USB doit appeler cette méthode après l’appel WdfDeviceCreate .

Le pilote client appelle cette méthode dans son implémentation EvtDriverDeviceAdd .

Pendant cet appel, les implémentations de rappel d’événements fournies par le pilote client sont également inscrites en définissant les membres appropriés de URS_CONFIG.

La méthode crée des listes de ressources pour les rôles d’hôte et de fonction, ainsi que les files d’attente nécessaires pour gérer les demandes IOCTL envoyées au contrôleur. À chaque opération de changement de rôle, la pile d’appareils enfants du rôle actuel est détruite et la pile d’appareils pour le nouveau rôle est chargée. La méthode UrsDeviceInitialize récupère les informations d’identification utilisées pour créer ces piles d’appareils. La méthode récupère également des informations sur l’appareil à partir du bus sous-jacent, comme ACPI.

Exemples



EVT_URS_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtUrsFilterResourceRequirements;
EVT_URS_SET_ROLE EvtUrsSetRole;

EvtDriverDeviceAdd (
    _In_ WDFDRIVER Driver,
    _Inout_ PWDFDEVICE_INIT DeviceInit
    )
{
...

    WDFDEVICE device;
    NTSTATUS status;
    WDF_OBJECT_ATTRIBUTES attributes;
    URS_CONFIG ursConfig;
...
 
    status = UrsDeviceInitInitialize(DeviceInit);
    if (!NT_SUCCESS(status)) {
        //UrsDeviceInitInitialize failed.
        return status;
    }
   
    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, DRIVER_CONTEXT);
    status = WdfDeviceCreate(&DeviceInit, &attributes, &device);
    if (!NT_SUCCESS(status)) {
        // WdfDeviceCreate failed.
        return status;
    }
    URS_CONFIG_INIT(&ursConfig, UrsHostInterfaceTypeXhci, EvtUrsFilterResourceRequirements);
    
    ursConfig.EvtUrsSetRole = EvtUrsSetRole;
    status = UrsDeviceInitialize(device, &ursConfig);

    if (!NT_SUCCESS(status)) {
        // UrsDeviceInitialize failed.
        return status;

    }

...

}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10
Serveur minimal pris en charge Windows Server 2016
Plateforme cible Windows
Version KMDF minimale 1.15
En-tête ursdevice.h (inclure Urscx.h)
Bibliothèque Urscxstub.lib
IRQL PASSIVE_LEVEL

Voir aussi

URS_CONFIG

URS_CONFIG_INIT