Freigeben über


Statische Enumeration

Die 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 Fähigkeit, nachfolgende Änderungen an der Systemkonfiguration zu melden.

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

Beispielsweise kann ein Sound Karte Treiber 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 Enumeration, indem statische untergeordnete Listen bereitgestellt werden. Jede statische untergeordnete Liste stellt eine Liste der untergeordneten Geräte dar, die mit einem übergeordneten Gerät verbunden sind. Der Bustreiber für das übergeordnete Gerät muss die untergeordneten Geräte des übergeordneten Geräts identifizieren, sie der statischen untergeordneten Liste des übergeordneten Geräts hinzufügen und eine PDO für jedes untergeordnete Gerät erstellen.

Erstellen einer statischen untergeordneten Liste

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

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

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

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

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

  1. Rufen Sie WdfPdoInitAllocate auf, um eine WDFDEVICE_INIT-Struktur zu erhalten.

  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 Aufruf von WdfDeviceCreate muss der Treiber WdfFdoAddStaticChild aufrufen, um das untergeordnete Gerät der untergeordneten Liste hinzuzufügen.

Ändern einer statischen untergeordneten Liste

Da Treiber nur statische untergeordnete Listen für Gerätekonfigurationen verwenden sollten, die vorab festgelegt und dauerhaft sind, muss ein Treiber eine statische untergeordnete Liste nach der Erstellung nur wenig ändern. 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 weiterhin 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 untergeordneten Liste

Wenn Sie den Inhalt einer statischen untergeordneten Liste abrufen müssen, kann der Treiber die Liste wie folgt durchlaufen:

  1. Aufrufen von WdfFdoLockStaticChildListForIteration.

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

  3. Aufrufen von WdfFdoUnlockStaticChildListFromIteration.