Création d’objets d’appareil dans un pilote de fonction
Chaque pilote de fonction crée un objet d’appareil framework pour chacun de ses appareils pris en charge qui existe sur le système. Étant donné que ces objets d’appareil sont créés par des pilotes de fonction, ils sont appelés objets d’appareil fonctionnel (FDO). Chaque FDO est la représentation d’un pilote de fonction d’un appareil.
Un pilote de fonction doit créer un objet d’appareil framework chaque fois que l’infrastructure appelle la fonction de rappel EvtDriverDeviceAdd du pilote. L’infrastructure appelle cette fonction de rappel pour informer le pilote qu’un de ses appareils pris en charge existe sur le système.
La fonction de rappel EvtDriverDeviceAdd du pilote reçoit un pointeur vers une structure WDFDEVICE_INIT . Le pilote peut appeler un ensemble de méthodes d’initialisation d’objets de périphérique d’infrastructure, qui stockent des informations dans la structure WDFDEVICE_INIT. En outre, les pilotes de fonction peuvent appeler des méthodes d’initialisation FDO du framework.
La création d’un objet d’appareil framework dans un pilote de fonction comprend généralement les étapes suivantes :
Inscription des fonctions de rappel pnP, d’alimentation et de stratégie d’alimentation.
La plupart des pilotes de fonction appellent WdfDeviceInitSetPnpPowerEventCallbacks pour inscrire des fonctions PnP et de rappel d’alimentation. Pour plus d’informations sur ces fonctions de rappel, consultez Prise en charge du PnP et de la gestion de l’alimentation dans les pilotes de fonction.
Si l’appareil prend en charge une faible consommation d’inactivité ou dispose de fonctionnalités de mise en éveil, le pilote de fonction appelle généralement WdfDeviceInitSetPowerPolicyEventCallbacks pour inscrire les fonctions de rappel de stratégie d’alimentation. Pour plus d’informations sur ces fonctions de rappel, consultez Propriété de Power Policy.
Inscription des fonctions de rappel spécifiques au pilote de fonction.
Certains pilotes de fonction appellent WdfFdoInitSetEventCallbacks, s’ils doivent participer à la spécification des ressources matérielles système requises par un appareil. Pour plus d’informations sur les ressources matérielles, consultez Ressources matérielles pour les pilotes Framework-Based.
Inscription des fonctions de rappel d’événements de fichier.
Si votre pilote doit répondre lorsqu’une application ouvre ou ferme un fichier sur un appareil, celui-ci doit appeler WdfDeviceInitSetFileObjectConfig pour inscrire des fonctions de rappel pour l’objet de fichier framework. Pour plus d’informations, consultez Utilisation d’objets de fichier framework.
Définition des attributs de requête d’E/S.
Si votre pilote reçoit des demandes d’E/S à partir d’objets de file d’attente d’infrastructure, il peut appeler WdfDeviceInitSetRequestAttributes pour configurer la mémoire contextuelle que l’infrastructure affectera aux objets de requête d’un appareil. Pour plus d’informations, consultez Utilisation du contexte d’objet de requête.
Définition des caractéristiques de l’appareil.
En règle générale, un pilote de fonction appelle certaines des méthodes suivantes pour spécifier les caractéristiques d’un appareil :
- WdfDeviceInitSetDeviceType, pour identifier le type de matériel pris en charge par le pilote.
- WdfDeviceInitSetIoType, pour identifier une méthode d’accès aux mémoires tampons de données, si le pilote gère les demandes d’E/S des applications.
- WdfDeviceInitSetCharacteristics, pour définir les caractéristiques de l’appareil, par exemple si l’appareil est en lecture seule ou prend en charge un média amovible.
- WdfDeviceInitSetExclusive, si l’appareil nécessite un accès exclusif par une application à la fois.
- WdfDeviceInitSetPowerInrush, si l’appareil nécessite une prise de courant lorsqu’il passe d’un état de faible consommation à son état de fonctionnement (D0).
- WdfDeviceInitSetPowerPageable ou WdfDeviceInitSetPowerNotPageable, pour indiquer si le pilote doit accéder aux données paginables pendant la transition du système entre un état en veille et l’état de travail (S0).
- WdfDeviceInitAssignName, pour attribuer un nom à l’objet d’appareil.
- WdfDeviceInitAssignSDDLString, pour affecter un descripteur de sécurité à l’objet d’appareil.
- WdfDeviceInitSetDeviceClass, pour identifier la classe d’installation de l’appareil.
Obtention des propriétés de l’appareil.
Parfois, les pilotes de fonction doivent obtenir des informations sur les propriétés de l’appareil que le pilote du bus de l’appareil, ou un autre pilote de niveau inférieur, a définies. Le pilote peut appeler WdfFdoInitQueryProperty ou WdfFdoInitAllocAndQueryProperty pour obtenir ces informations. Les nouveaux pilotes ciblant les Windows 8.1 et versions ultérieures peuvent appeler WdfFdoInitQueryPropertyEx et WdfFdoInitAllocAndQueryPropertyEx.
Accès à la clé de Registre de l’appareil.
Certains pilotes de fonction doivent obtenir des informations sur le périphérique ou le pilote qu’un autre pilote, un utilisateur ou un package d’installation a placé dans le Registre. Le pilote peut appeler WdfFdoInitOpenRegistryKey pour ouvrir la clé de Registre du périphérique ou du pilote. Pour plus d’informations, consultez Utilisation du Registre dans les pilotes Framework-Based.
Création d’une configuration de liste enfant par défaut à utiliser pour l’énumération dynamique.
Si vous écrivez un pilote de fonction pour un bus et si votre pilote effectue l’énumération dynamique des périphériques enfants connectés au bus, le pilote doit appeler WdfFdoInitSetDefaultChildListConfig. Pour plus d’informations, consultez Énumération des appareils sur un bus.
Création de l’objet d’appareil.
La dernière étape de la création d’un objet d’appareil consiste à appeler WdfDeviceCreate.