Erstellen einer Ressourcenanforderungsliste

Wenn ein Bustreiber ein untergeordnetes Gerät erkennt, ist der Treiber für die Erstellung einer Ressourcenanforderungsliste für das Gerät verantwortlich. Jedes Element in der Liste ist eine logische Konfiguration für das Gerät.

Nachdem der Treiber das Gerät während der Busaufzählung gemeldet hat, ruft das Framework die Rückruffunktion EvtDeviceResourceRequirementsQuery des Treibers auf. Diese Rückruffunktion empfängt ein Handle für ein resource-requirements-list-Objekt, das eine leere Ressourcenanforderungsliste darstellt.

Der Treiber muss dann die folgenden Schritte ausführen, um einer Ressourcenanforderungsliste Informationen hinzuzufügen:

  • Erstellen Sie eine leere logische Konfiguration.

    Für jede logische Konfiguration, die vom Treiber angegeben wird, muss der Treiber WdfIoResourceListCreate aufrufen, um eine leere logische Konfiguration zu erstellen.

  • Fügen Sie der logischen Konfiguration Ressourcendeskriptoren hinzu.

    Um ressourcendeskriptoren zu einer logischen Konfiguration hinzuzufügen, muss der Treiber für jeden Typ von Hardwareressourcen, den das Gerät benötigt, wie folgt vorgehen:

    1. Geben Sie eine vom Treiber zugewiesene IO_RESOURCE_DESCRIPTOR-Struktur ein, die einen Bereich gültiger Werte für eine bestimmte Ressource angibt.
    2. Rufen Sie WdfIoResourceListAppendDescriptor oder WdfIoResourceListInsertDescriptor auf, um den Inhalt der IO_RESOURCE_DESCRIPTOR-Struktur einer logischen Konfiguration hinzuzufügen.

    Wenn ein Gerät mehrere instance eines Ressourcentyps verwendet, müssen alle Treiber im Stapel, die auf die Ressource zugreifen, die Reihenfolge kennen, in der Ressourcen hinzugefügt werden. Wenn ein Gerät beispielsweise zwei Bereiche von E/A-Portadressen benötigt, müssen alle Treiber, die auf die Ressourcendeskriptoren zugreifen, die Reihenfolge kennen, in der die beiden Bereiche der logischen Konfiguration hinzugefügt werden.

  • Fügen Sie die logische Konfiguration der Liste der Ressourcenanforderungen hinzu.

    Um der Ressourcenanforderungsliste des Geräts eine logische Konfiguration hinzuzufügen, ruft der Treiber WdfIoResourceRequirementsListAppendIoResList oder WdfIoResourceRequirementsListInsertIoResList auf.

    Beim Zuweisen von Ressourcen zu einem Gerät versucht der PnP-Manager, die Anforderungen der ersten logischen Konfiguration in der Liste zu erfüllen. Wenn die für diese Konfiguration erforderlichen Ressourcen nicht verfügbar sind, stimmt der PnP-Manager mit der nächsten Konfiguration in der Liste überein, für die Ressourcen verfügbar sind.

    Wenn Ihr Treiber ein Nicht-PnP-Gerät unterstützt, muss Ihr Treiber in der Regel auch WdfIoResourceRequirementsListSetSlotNumber und WdfIoResourceRequirementsListSetInterfaceType aufrufen.

Nachdem die EvtDeviceResourceResourceRequirementsQuery-Rückruffunktion des Treibers zurückgegeben wurde, übergibt das Framework die Ressourcenanforderungsliste an den PnP-Manager.