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 |