Freigeben über


IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Der PnP-Manager sendet diesen IRP an einen Gerätestapel, damit der Funktionstreiber ggf. die vom Gerät benötigten Ressourcen anpassen kann.

Dieser IRP wird in der Regel vom Funktionstreiber verarbeitet.

Der übergeordnete Bustreiber (und Busfiltertreiber) sollte diese Anforderung für eine untergeordnete PDO nicht verarbeiten. Stattdessen sollte ein solcher Treiber ressourcenanforderungen als Reaktion auf eine IRP_MN_QUERY_RESOURCE_REQUIREMENTS-Anforderung melden.

Treiber für obere und untere Filter verarbeiten diese IRP nicht.

Wert

0x0D

Hauptcode

IRP_MJ_PNP

Sendebedingungen

Der PnP-Manager sendet diese IRP, wenn er die Zuweisung von Ressourcen zu einem Gerät vorbereitet.

Der PnP-Manager sendet diesen IRP an IRQL PASSIVE_LEVEL im Kontext eines beliebigen Threads.

Eingabeparameter

Irp-> IoStatus.Information verweist auf eine IO_RESOURCE_REQUIREMENTS_LIST , die die Hardwareressourcenanforderungen für das Gerät enthält. Der Zeiger ist NULL , wenn das Gerät keine Hardwareressourcen verbraucht.

Parameters.FilterResourceRequirements.IoResourceRequirementList verweist ebenfalls auf eine IO_RESOURCE_REQUIREMENTS_LIST, aber der Funktionstreiber sollte die Liste im IoStatus-Block verwenden.

Ausgabeparameter

Wird im E/A-status-Block zurückgegeben.

E/A-Statusblock

Wenn ein Funktionstreiber diese IRP verarbeitet, verarbeitet er sie auf dem Weg des IRP zurück nach oben im Stapel. Wenn der Funktionstreiber das IRP erfolgreich verarbeitet, legt er Irp-IoStatus.Status> auf STATUS_SUCCESS und Irp-IoStatus.Information> auf einen Zeiger auf einen IO_RESOURCE_REQUIREMENTS_LIST fest, der die gefilterten Ressourcenanforderungen enthält. Weitere Informationen zum Festlegen der gefilterten Ressourcenliste finden Sie weiter unten im Abschnitt "Vorgang". Wenn bei einem Funktionstreiber bei der Behandlung dieses IRP ein Fehler auftritt, wird der Fehler in Irp-IoStatus.Status> festgelegt. Wenn ein Funktionstreiber dieses IRP nicht verarbeitet, verwendet er IoSkipCurrentIrpStackLocation , um den IRP unverändert im Stapel zu übergeben.

Treiber für obere und untere Filter verarbeiten diese IRP nicht. Ein solcher Treiber ruft IoSkipCurrentIrpStackLocation auf, übergibt den IRP an den nächsten Treiber, darf Irp-IoStatus> nicht ändern und darf die IRP nicht abschließen.

Der übergeordnete Bustreiber verarbeitet diese IRP nicht. Sie belässt Irp-IoStatus> unverändert und schließt das IRP ab.

Vorgang

Der PnP-Manager sendet eine IRP_MN_QUERY_RESOURCE_REQUIREMENTS-Anforderung an den übergeordneten Bustreiber für das Gerät, bevor der Funktionstreiber sein Geräteobjekt an den Gerätestapel angefügt hat. Um dem Funktionstreiber ggf. die Möglichkeit zu geben, die Ressourcenanforderungen des Geräts zu ändern, sendet der PnP-Manager später eine IRP_MN_FILTER_RESOURCE_REQUIREMENTS-Anforderung an den vollständigen Gerätestapel. Der PnP-Manager sendet diese IRP, bevor er dem Gerät während der anfänglichen Gerätekonfiguration Hardwareressourcen zuordnet. Der PnP-Manager kann diese IRP auch während des Ressourcenausgleichs senden.

Wenn der PnP-Manager diese IRP sendet, stellt er dem Treiberstapel eine Liste mit Ressourcenanforderungen bereit, die Treiber ändern und zurückgeben können. Der PnP-Manager stellt eine der folgenden Typen von Ressourcenanforderungen bereit (in der Reihenfolge der Priorität aufgeführt):

  • Erzwungene Konfiguration (geändert von einer Ressourcenliste in eine Ressourcenanforderungsliste)

  • Außerkraftsetzen der Konfiguration

  • Basiskonfiguration

  • Startkonfiguration (von einer Ressourcenliste in eine Liste mit Ressourcenanforderungen geändert)

Wenn ein Funktionstreiber diese IRP verarbeitet, muss er eine Vervollständigungsroutine festlegen und das IRP auf dem Weg zur Sicherung des Gerätestapels verarbeiten. Informationen zur Behandlung eines PnP-IRP auf dem Weg nach oben im Gerätestapel finden Sie unter Plug & Play.

Wenn der Funktionstreiber die Größe der aktuellen Liste, auf die Irp-IoStatus.Information> verweist, nicht ändert, kann der Treiber die vorhandene Liste ändern. Wenn der Treiber die Größe der Anforderungsliste ändern muss, muss der Treiber eine neue IO_RESOURCE_REQUIREMENTS_LIST Liste ausgelagertem Arbeitsspeicher zuordnen und die vorherige Liste freigeben. Der PnP-Manager gibt die zurückgegebene Struktur frei, wenn sie nicht mehr benötigt wird.

Ein Funktionstreiber muss die Reihenfolge der Ressourcen in der Liste beibehalten, auf die Irp-IoStatus.Information> verweist, und darf keine Ressourcentags ändern, die er nicht verarbeitet. Der Treiber muss darauf achten, die Anforderungsliste so anzupassen, dass der übergeordnete Bus des Geräts unterstützt. Wenn ein Funktionstreiber der Anforderungsliste eine neue Ressource hinzufügt und diese Ressource dem Gerät zugewiesen ist, sollte der Funktionstreiber diese Ressource aus dem IRP_MN_START_DEVICE herausfiltern, bevor der Start-IRP an den Bustreiber übergeben wird.

Wenn der Funktionstreiber für das Gerät diese IRP nicht verarbeitet, verwendet der PnP-Manager die Ressourcenanforderungen, die vom übergeordneten Bustreiber als Reaktion auf die IRP_MN_QUERY_RESOURCE_REQUIREMENTS-Anforderung angegeben wurden.

Ein Funktionstreiber muss bereit sein, diese IRP für ein Gerät jederzeit zu verarbeiten, nachdem die AddDevice-Routine des Treibers für das Gerät aufgerufen wurde.

Unter Plug & Play finden Sie die allgemeinen Regeln für die Behandlung Plug & Play untergeordneten IRPs.

Senden dieses IRP

Ist für das System reserviert. Treiber dürfen diese IRP nicht senden.

Anforderungen

Header

Wdm.h (einschließen Wdm.h, Ntddk.h oder Ntifs.h)

Weitere Informationen

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE