Freigeben über


IRP_MN_QUERY_BUS_INFORMATION

Der PnP-Manager verwendet diese IRP, um den Typ und instance Nummer des übergeordneten Busses eines Geräts anzufordern.

Bustreiber sollten diese Anforderung für ihre untergeordneten Geräte (PDOs) verarbeiten. Funktions- und Filtertreiber verarbeiten diese IRP nicht.

Wert

0x15

Hauptcode

IRP_MJ_PNP

Sendebedingungen

Der PnP-Manager sendet diese IRP, wenn ein Gerät aufgelistet wird.

Der PnP-Manager sendet diese IRP bei IRQL PASSIVE_LEVEL in einem beliebigen Threadkontext.

Eingabeparameter

Keine

Ausgabeparameter

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

E/A-Statusblock

Ein Bustreiber legt Irp-IoStatus.Status> auf STATUS_SUCCESS oder auf einen entsprechenden Fehler status fest.

Bei Erfolg legt ein Bustreiber Irp-IoStatus.Information> auf einen Zeiger auf eine abgeschlossene PNP_BUS_INFORMATION-Struktur fest. (Weitere Informationen finden Sie im Abschnitt "Vorgang".) Bei einem Fehler legt der Bustreiber Irp-IoStatus.Information> auf Null fest.

Funktions- und Filtertreiber verarbeiten diese IRP nicht.

Vorgang

Die als Antwort auf diese IRP zurückgegebenen Informationen stehen den Funktions- und Filtertreibern für Geräte im Bus zur Verfügung. Funktions- und Filtertreiber können IoGetDeviceProperty aufrufen, um devicePropertyBusTypeGuid, DevicePropertyLegacyBusType oder DevicePropertyBusNumber anzufordern. Funktions- und Filtertreiber, die Geräte auf mehr als einem Bus unterstützen, können diese Informationen verwenden, um zu bestimmen, auf welchem Bus sich ein bestimmtes Gerät befindet.

Wenn ein Bustreiber als Reaktion auf diese IRP Informationen zurückgibt, weist er eine PNP_BUS_INFORMATION Struktur aus dem ausgelagerten Speicher zu. Der PnP-Manager gibt die Struktur frei, wenn sie nicht mehr benötigt wird.

Eine PNP_BUS_INFORMATION-Struktur hat das folgende Format:

typedef struct _PNP_BUS_INFORMATION {
    GUID BusTypeGuid;
    INTERFACE_TYPE LegacyBusType;
    ULONG BusNumber;
} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;

Die Elemente der Struktur werden wie folgt definiert:

BusTypeGuid
Ein Bustreiber legt BusTypeGuid auf die GUID für den Bustyp fest, auf dem sich das Gerät befindet. GUIDs für Standardbustypen sind in Wdmguid.h aufgeführt. Treiberschreiber sollten MITHILFE von Uuidgen GUIDs für andere Bustypen generieren.

LegacyBusType
Ein PnP-Bustreiber legt LegacyBusType auf die INTERFACE_TYPE des übergeordneten Busses fest. Die Schnittstellentypen sind in Wdm.h definiert. Einige Busse haben einen bestimmten INTERFACE_TYPE Wert, z. B . PCMCIABus, PCIBus oder PNPISABus. Bei anderen Bussen, insbesondere neueren Bussen wie USB, setzt der Bustreiber dieses Element auf PNPBus.

LegacyBusType gibt die Schnittstelle an, die für die Kommunikation mit dem Gerät verwendet wird. Dies kann dem Typ des übergeordneten Busses entsprechen oder auch nicht. Beispielsweise ist die Schnittstelle für eine CardBus-Karte, die an einen PCI CardBus-Controller angeschlossen ist, PCIBus. Die Schnittstelle für eine PCMCIA-Karte auf einem PCI CardBus-Controller ist jedoch PCMCIABus.

BusNumber
Ein Bustreiber legt BusNumber auf eine Zahl fest, die den Bus von anderen Bussen desselben Typs auf dem Computer unterscheidet. Das Busnummerierungsschema ist busspezifisch. Busnummern können zwar virtuell sein, müssen aber mit jeder Nummerierung übereinstimmen, die von Legacyschnittstellen wie IoReportResourceUsage verwendet wird.

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

Senden dieses IRP

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

Rufen Sie IoGetDeviceProperty auf, um Informationen über den Bus abzurufen, an den ein Gerät angeschlossen ist.

Anforderungen

Header

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

Weitere Informationen

IoGetDeviceProperty