Freigeben über


IRP_MN_WRITE_CONFIG

Bustreiber für Busse mit Konfigurationsraum müssen diese Anforderung für ihre untergeordneten Geräte (untergeordnete PDOs) verarbeiten. Funktions- und Filtertreiber verarbeiten diese Anforderung nicht.

Wert

0x10

Hauptcode

IRP_MJ_PNP

Sendebedingungen

Ein Treiber oder eine andere Systemkomponente sendet diesen IRP, um Daten in den Konfigurationsraum des übergeordneten Bus eines Geräts zu schreiben.

Ein Treiber oder eine andere Systemkomponente sendet diesen IRP an IRQL < DISPATCH_LEVEL in einem beliebigen Threadkontext.

Eingabeparameter

Parameters.ReadWriteConfig ist eine Struktur, die die folgenden Informationen enthält:

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

Die Member der -Struktur können von verschiedenen Bustreibern unterschiedlich interpretiert werden, aber die Member werden in der Regel wie folgt definiert:

WhichSpace
Gibt den Konfigurationsbereich an. Informationen zu Werten, die für WhichSpace angegeben werden können, finden Sie unter IRP_MN_READ_CONFIG.

Puffer
Verweist auf einen Puffer, der die zu schreibenden Daten enthält. Das Format des Puffers ist busspezifisch.

Offset
Gibt einen Offset in den Konfigurationsbereich an.

Länge
Gibt die Anzahl der zu schreibenden Bytes an.

Ausgabeparameter

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

E/A-Statusblock

Ein Bustreiber legt Irp-IoStatus.Status> auf STATUS_SUCCESS oder auf einen geeigneten Fehler status fest, z. B. STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE oder STATUS_DEVICE_NOT_READY.

Bei Erfolg legt ein Bustreiber Irp-IoStatus.Information> auf die Anzahl der geschriebenen Bytes fest.

Wenn ein Bustreiber diese Anforderung nicht sofort ausführen kann, kann er das IRP als ausstehend markieren, STATUS_PENDING zurückgeben und die IRP zu einem späteren Zeitpunkt abschließen.

Vorgang

Ein Bustreiber verarbeitet diese IRP für seine untergeordneten Geräte (untergeordnete PDOs).

Funktions- und Filtertreiber verarbeiten diese IRP nicht; sie übergeben es an den nächstniedrigen Treiber ohne Änderungen an Irp-IoStatus.Status> und legen keine IoCompletion-Routine fest.

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

Senden dieses IRP

In der Regel sendet ein Funktionstreiber diesen IRP an den Gerätestapel, an den er angefügt ist, und der IRP wird vom übergeordneten Bustreiber verarbeitet.

Informationen zum Senden von IRPs finden Sie unter Behandeln von IRPs . Die folgenden Schritte gelten speziell für dieses IRP:

  • Ordnen Sie einen Puffer aus einem ausgelagerten Pool zu, und initialisieren Sie ihn mit den zu schreibenden Daten.

  • Legen Sie die Werte am nächsten E/A-Stapelspeicherort des IRP fest: Legen Sie MajorFunction auf IRP_MJ_PNP fest, legen Sie MinorFunction auf IRP_MN_WRITE_CONFIG fest, und legen Sie die entsprechenden Werte in Parameters.ReadWriteConfig fest.

  • Initialisieren Sie IoStatus.Status , um STATUS_NOT_SUPPORTED.

  • Aufheben der Zuordnung des IRP und des Puffers, wenn sie nicht mehr benötigt werden.

Treiber müssen diesen IRP von IRQL < DISPATCH_LEVEL senden.

Ein Treiber kann über eine Busschnittstellenroutine bei DISPATCH_LEVEL auf den Konfigurationsraum eines Busses zugreifen, wenn der übergeordnete Bustreiber eine solche Schnittstelle exportiert. Um eine Busschnittstelle abzurufen, sendet ein Treiber eine IRP_MN_QUERY_INTERFACE-Anforderung an den übergeordneten Bustreiber. Der Treiber ruft dann die entsprechende Routine auf, die in der Schnittstelle zurückgegeben wird.

Um beispielsweise Konfigurationsbereich aus DISPATCH_LEVEL kann ein Treiber IRP_MN_QUERY_INTERFACE während der Treiberinitialisierung aufrufen, um die BUS_INTERFACE_STANDARD-Schnittstelle vom übergeordneten Bustreiber abzurufen. Der Treiber sendet die Abfrage-IRP von IRQL PASSIVE_LEVEL. Später ruft der Treiber aus code at IRQL DISPATCH_LEVEL die entsprechende Routine auf, die in der Schnittstelle zurückgegeben wird, z. B. die Interface.SetBusData-Routine .

Anforderungen

Header

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

Weitere Informationen

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG