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 les 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 est en cours d’exécution.

Par exemple, le pilote d’une carte audio peut agir en tant que pilote de bus et créer des objets d’appareil physique distincts pour chacune des fonctionnalités de la carte, telles que MIDI, audio et joystick.

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 pour l’appareil parent doit identifier les appareils enfants du parent, les ajouter à la liste enfant statique de l’appareil parent et créer une PDO pour chaque appareil enfant.

Création d’une liste enfant statique

Chaque fois qu’un pilote crée un objet d’appareil framework 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 le framework appelle la fonction de rappel EvtDriverDeviceAdd d’un pilote de bus, cette fonction de rappel doit appeler WdfDeviceCreate pour créer une FDO pour le dispositif 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 enfant.

Si vous le souhaitez, le pilote peut appeler WdfDeviceSetBusInformationForChildren pour fournir au framework des informations sur le bus. Cela est recommandé, car il facilite l’identification du bus pour les appareils et applications enfants.

Pour créer une 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 framework qui représente une PDO.

Pour plus d’informations sur la création d’un PDO, consultez Création d’objets de périphérique 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 ne doivent utiliser que des listes enfants statiques pour les configurations d’appareil prédéterminées et permanentes, il n’est pas nécessaire qu’un pilote modifie une liste enfant statique après la création de celle-ci. Si le pilote détermine qu’un appareil enfant est devenu inaccessible, le pilote peut appeler WdfPdoMarkMissing. (Si un appareil enfant reste accessible mais ne répond pas et est inutilisable, 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.