Freigeben über


Statische Enumeration

Statische Enumeration ist die Fähigkeit eines Treibers, das Vorhandensein von Geräten während der Systeminitialisierung zu erkennen und zu melden, mit einer begrenzten Möglichkeit, nachfolgende Änderungen an der Systemkonfiguration zu melden.

Bustreiber können statische Enumeration verwenden, wenn die Anzahl und der Typ von Geräten oder funktionalen Untereinheiten vorbestimmt und dauerhaft ist und nicht von der Konfiguration des Systems abhängt, von dem der Treiber ausgeführt wird.

Beispielsweise kann der Treiber einer Soundkarte als Bustreiber fungieren und separate physische Geräteobjekte (PDOs) für jede der Funktionen der Karte erstellen, z. B. MIDI, Audio und Joystick.

Statische untergeordnete Listen

Das Framework ermöglicht Treibern die Unterstützung der statischen Aufzählung, indem statische untergeordnete Listen bereitgestellt werden. Jede statische untergeordnete Liste stellt eine Liste untergeordneter Geräte dar, die mit einem übergeordneten Gerät verbunden sind. Der Bus-Treiber für das übergeordnete Gerät muss die Kindgeräte des übergeordneten Geräts identifizieren, zur statischen Kinderliste des übergeordneten Geräts hinzufügen und für jedes Kindgerät ein PDO erstellen.

Erstellen einer statischen Kindliste

Jedes Mal, wenn ein Treiber ein Framework-Geräteobjekt erstellt, das ein funktionales Geräteobjekt (FDO) für ein Gerät darstellt, erstellt das Framework eine leere, statische untergeordnete Liste für das Gerät.

Wenn das Framework die EvtDriverDeviceAdd-Rückruffunktion eines Bustreibers aufruft, muss die Rückruffunktion WdfDeviceCreate aufrufen, um einen FDO für das übergeordnete Gerät zu erstellen. Weitere Informationen zum Erstellen eines FDO finden Sie unter Erstellen von Geräteobjekten in einem Funktionstreiber.

Der Treiber muss dann die untergeordneten Geräte des übergeordneten Geräts aufzählen, PDOs für die untergeordneten Geräte erstellen und die untergeordneten Geräte zur Liste der untergeordneten Geräte hinzufügen.

Optionalerweise kann der Treiber WdfDeviceSetBusInformationForChildren aufrufen, um dem Framework Informationen über den Bus bereitzustellen. Dies wird empfohlen, da es für Geräte und Apps einfacher ist, den Bus zu identifizieren.

Um einen PDO für ein erkanntes untergeordnetes Gerät zu erstellen, muss der Bustreiber:

  1. Rufen Sie WdfPdoInitAllocate auf, um eine WDFDEVICE_INIT Struktur abzurufen.

  2. Initialisieren Sie die WDFDEVICE_INIT Struktur.

  3. Rufen Sie WdfDeviceCreate auf, um ein Framework-Geräteobjekt zu erstellen, das eine PDO darstellt.

Weitere Informationen zum Erstellen eines PDO finden Sie unter Erstellen von Geräteobjekten in einem Bustreiber.

Nach dem Aufrufen von WdfDeviceCreate muss der Treiber WdfFdoAddStaticChild aufrufen, um das untergeordnete Gerät zur untergeordneten Liste hinzuzufügen.

Ändern einer statischen Kind-Liste

Da Treiber nur statische untergeordnete Listen für Gerätekonfigurationen verwenden sollten, die vorher festgelegt und dauerhaft sind, ist es wenig erforderlich, dass ein Treiber eine statische untergeordnete Liste nach dem Erstellen ändert. Wenn der Treiber feststellt, dass auf ein untergeordnetes Gerät nicht mehr zugegriffen werden kann, kann der Treiber WdfPdoMarkMissing aufrufen. (Wenn auf ein untergeordnetes Gerät zugegriffen werden kann, aber nicht mehr reagiert und nicht mehr verwendet werden kann, sollte der Treiber das Element "Failed" der WDF_DEVICE_STATE-Struktur auf WdfTrue festlegen und dann WdfDeviceSetDeviceState aufrufen.)

Durchlaufen einer statischen Kind-Liste

Wenn Sie den Inhalt einer statischen Kinderliste abrufen müssen, kann der Treiber die Liste durchlaufen, indem der folgende Befehl ausgeführt wird:

  1. Aufruf von WdfFdoLockStaticChildListForIteration.

  2. Aufrufen von WdfFdoRetrieveNextStaticChild so oft wie nötig.

  3. Aufrufen von WdfFdoUnlockStaticChildListFromIteration.