UrsDeviceInitialize, fonction (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 inscrit les fonctions de rappel d’événements pertinentes avec l’extension de classe de contrôleur de 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 initialisée par le pilote client en appelant URS_CONFIG_INIT.
Valeur de retour
La méthode retourne STATUS_SUCCESS si l’opération réussit. Dans le cas contraire, cette méthode peut retourner un code d’erreur NTSTATUS approprié .
Remarques
Le pilote client pour le 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 et les files d’attente requises pour gérer les requêtes IOCTL envoyées au contrôleur. Avec chaque opération de changement de rôle, la pile d’appareils enfant 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 générer 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;
}
...
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 10 |
serveur minimum pris en charge | Windows Server 2016 |
plateforme cible | Windows |
version minimale de KMDF | 1.15 |
d’en-tête | ursdevice.h (include Urscx.h) |
bibliothèque | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |