Partager via


Énumération statique

L’énumération statique est la capacité d’un pilote à détecter et à signaler l’existence d’appareils pendant l’initialisation du système, avec une capacité limitée à signaler les modifications ultérieures apportées à la configuration du système.

Les pilotes de bus peuvent utiliser l’énumération statique si le nombre et le type d’appareils ou de sous-unités fonctionnelles sont prédéterminés et permanents, et ne dépendent pas de la configuration du système sur lequel le pilote s’exécute.

Par exemple, le pilote d’un carte sonore peut jouer le rôle de pilote de bus et créer des objets d’appareil physique (PPO) distincts pour chacune des fonctionnalités de l’carte, telles que le MIDI, l’audio et la manette de jeu.

Listes enfants statiques

L’infrastructure permet aux pilotes de prendre en charge l’énumération statique en fournissant des listes enfants statiques. Chaque liste enfant statique représente une liste d’appareils enfants connectés à un appareil parent. Le pilote de bus de l’appareil parent doit identifier les appareils enfants du parent, les ajouter à la liste enfant statique de l’appareil parent et créer une AOP pour chaque appareil enfant.

Création d’une liste enfant statique

Chaque fois qu’un pilote crée un objet d’appareil d’infrastructure qui représente un objet d’appareil fonctionnel (FDO) pour un appareil, l’infrastructure crée une liste enfant statique vide pour l’appareil.

Lorsque l’infrastructure appelle la fonction de rappel EvtDriverDeviceAdd d’un pilote de bus, la fonction de rappel doit appeler WdfDeviceCreate pour créer un FDO pour l’appareil parent. Pour plus d’informations sur la création d’un FDO, consultez Création d’objets d’appareil dans un pilote de fonction.

Le pilote doit ensuite énumérer les enfants de l’appareil parent, créer des PDO pour les enfants et ajouter les enfants à la liste des enfants.

Si vous le souhaitez, le pilote peut appeler WdfDeviceSetBusInformationForChildren pour fournir au framework des informations sur le bus. Il est recommandé de le faire, car il permet aux appareils et applications enfants d’identifier plus facilement le bus.

Pour créer un PDO pour un appareil enfant détecté, le pilote de bus doit :

  1. Appelez WdfPdoInitAllocate pour obtenir une structure WDFDEVICE_INIT .

  2. Initialisez la structure WDFDEVICE_INIT.

  3. Appelez WdfDeviceCreate pour créer un objet d’appareil d’infrastructure qui représente un PDO.

Pour plus d’informations sur la création d’un PDO, consultez Création d’objets d’appareil dans un pilote de bus.

Après avoir appelé WdfDeviceCreate, le pilote doit appeler WdfFdoAddStaticChild pour ajouter l’appareil enfant à la liste enfant.

Modification d’une liste enfant statique

Étant donné que les pilotes doivent utiliser uniquement des listes enfants statiques pour les configurations de périphériques prédéterminées et permanentes, il est peu nécessaire qu’un pilote modifie une liste enfant statique après l’avoir créée. Si le pilote détermine qu’un appareil enfant est devenu inaccessible, il peut appeler WdfPdoMarkMissing. (Si un appareil enfant reste accessible mais devient inutilisable et ne répond plus, le pilote doit définir le membre Failed de la structure WDF_DEVICE_STATE sur WdfTrue , puis appeler WdfDeviceSetDeviceState.)

Traversée d’une liste enfant statique

Si vous devez récupérer le contenu d’une liste enfant statique, le pilote peut parcourir la liste en procédant comme suit :

  1. Appel de WdfFdoLockStaticChildListForIteration.

  2. Appel de WdfFdoRetrieveNextStaticChild autant de fois que nécessaire.

  3. Appel de WdfFdoUnlockStaticChildListFromIteration.