Création d’objets d’appareil dans un pilote de bus
Chaque pilote de bus doit créer un objet d’appareil framework lorsqu’il découvre qu’un appareil enfant est connecté à un appareil parent. L’appareil parent est généralement un bus, mais il peut également s’agir d’un appareil multifonction pour lequel chaque fonction nécessite un ensemble distinct de pilotes (par exemple, une carte son qui prend en charge l’audio numérique et midi). Les objets d’appareil créés par les pilotes de bus sont appelés objets d’appareil physique (PDO), car chacun représente une connexion réelle d’un élément matériel (l’enfant) à un autre (le parent).
Le processus d’identification et de création de rapports sur les appareils connectés à un bus est appelé énumération de bus.
Si un pilote de bus effectue une énumération de bus dynamique, sa fonction de rappel EvtChildListCreateDevice reçoit un handle pour une structure WDFDEVICE_INIT .
Si un pilote de bus effectue une énumération de bus statique, il doit appeler WdfPdoInitAllocate pour obtenir un handle à une structure WDFDEVICE_INIT.
Pour plus d’informations sur l’énumération de bus, consultez Énumération des appareils sur un bus.
Un pilote de bus peut appeler un ensemble de méthodes d’initialisation d’objet d’appareil framework, qui stockent des informations dans la structure WDFDEVICE_INIT . En outre, les pilotes de bus peuvent appeler des méthodes d’initialisation PDO du framework.
La création d’un objet d’appareil framework pour un appareil enfant énuméré comprend généralement les étapes suivantes :
Inscription des fonctions de rappel spécifiques au pilote de bus.
La plupart des pilotes de bus appellent WdfPdoInitSetEventCallbacks, car ils doivent spécifier les ressources matérielles système requises par un appareil. Pour plus d’informations sur la spécification des ressources matérielles, consultez Ressources matérielles pour les pilotes Framework-Based. Des fonctions de rappel supplémentaires peuvent être inscrites si l’appareil et le pilote prennent en charge l’éjection.
Chaînes d’identification d’appareil de création de rapports.
Les pilotes de bus doivent signaler les chaînes d’identification de l’appareil en appelant WdfPdoInitAssignDeviceID, WdfPdoInitAssignInstanceID, WdfPdoInitAddCompatibleID et WdfPdoInitAddHardwareID pour chaque type de chaîne pris en charge par l’appareil. En outre, les pilotes de bus qui utilisent la version 1.9 ou ultérieure de l’infrastructure peuvent appeler WdfPdoInitAssignContainerID.
Indique si le pilote de bus peut prendre en charge l’appareil en mode brut.
Si le pilote de bus prend en charge le mode brut pour l’appareil, il doit appeler WdfPdoInitAssignRawDevice.
Fournir du texte pouvant être affiché qui décrit l’appareil.
Les pilotes de bus appellent WdfPdoInitAddDeviceText et WdfPdoInitSetDefaultLocale pour fournir du texte qui décrit l’appareil aux utilisateurs, dans plusieurs langues.
Création de l’objet d’appareil.
La dernière étape de la création d’un objet d’appareil consiste à appeler WdfDeviceCreate.
Si le pilote rencontre une erreur lors de l’initialisation de la structure WDFDEVICE_INIT qu’il a obtenue à partir de WdfPdoInitAllocate, le pilote doit appeler WdfDeviceInitFree au lieu de WdfDeviceCreate.
Une fois que le pilote de bus a créé l’objet d’appareil, il appelle généralement WdfDeviceSetPnpCapabilities et WdfDeviceSetPowerCapabilities pour signaler les fonctionnalités d’Plug-and-Play et d’alimentation de l’appareil.
Chaque pilote de bus est également le pilote de fonction de l’adaptateur de bus. Par conséquent, le pilote doit également fournir une fonction de rappel EvtDriverDeviceAdd . Cette fonction de rappel crée un objet d’appareil fonctionnel (FDO) pour chaque adaptateur de bus sur le système. Pour plus d’informations sur la création d’objets FDO, consultez Création d’objets d’appareil dans un pilote de fonction.