Behandeln von IRP_MN_REGINFO und IRP_MN_REGINFO_EX zum Registrieren von Blöcken

Unter Windows 98 und Windows 2000 sendet das System die IRP_MN_REGINFO Anforderung an einen Treiber, damit ein Treiber seine WMI-Klassen registrieren kann. Unter Windows XP und höher sendet das System stattdessen die IRP_MN_REGINFO_EX-Anforderung . Die meisten Treiber können diese Anforderungen mithilfe von WmiSystemControl verarbeiten, um eine Rückrufroutine bereitzustellen. Weitere Informationen finden Sie unter Verwenden der WMI-Bibliothek zum Registrieren von Blöcken .

Ein Treiber muss IRP_MN_REGINFO oder IRP_MN_REGINFO_EX Anforderungen verarbeiten, um Blöcke zu registrieren, die dynamische instance Namen verwenden oder eine Liste von treiberdefinierten statischen instance Namen verwenden. Er kann WmiSystemControl nicht aufrufen, um solche Blöcke zu registrieren. Ein Treiber kann diese Anforderung optional verarbeiten, um Blöcke zu registrieren, die statische instance Namen basierend auf der PDO oder einer vom Treiber definierten Basisnamenszeichenfolge verwenden.

In diesem Fall gilt für den Treiber Folgendes:

  1. Füllt eine WMIREGINFO-Struktur unter Parameters.WMI.Buffer aus, die Folgendes angibt:

    • Die Anzahl aller vom Treiber bereitgestellten Registrierungsdaten, einschließlich der Daten, die im Auftrag eines anderen Treibers bereitgestellt werden.

    • Der Registrierungspfad des Treibers.

    • Der Name der MOF-Ressource des Treibers.

    • Die Anzahl der zu registrierenden Blöcke.

    • Ein Array von WMIREGGUID-Strukturen , eine für jeden Block.

  2. Für jeden Block füllt der Treiber eine WMIREGGUID-Struktur aus, die Folgendes angibt:

    • Die GUID, die den Block darstellt.

    • Flags, die Informationen zu instance Namen und anderen Merkmalen des Blocks bereitstellen, z. B. ob das Sammeln des Blocks teuer ist. Weitere Informationen finden Sie unter WMI-Registrierungsflags.

    Wenn der Block mit statischen instance Namen registriert wird, legt der Treiber eines der folgenden Member fest, um statische instance Namensdaten für den Block anzugeben:

    • Wenn der Treiber Flags mit WMIREG_FLAG_INSTANCE_LIST festlegt, wird InstanceNameList auf einen Offset auf eine Liste statischer instance Namenszeichenfolgen festgelegt. WMI gibt Instanzen in nachfolgenden Anforderungen nach Index in dieser Liste an.

    • Wenn der Treiber Flags mit WMIREG_FLAG_INSTANCE_BASENAME festlegt, wird BaseNameOffset auf einen Offset auf eine Basisnamenzeichenfolge festgelegt. WMI verwendet diese Zeichenfolge, um statische instance Namen für den Block zu generieren.

    • Wenn der Treiber Flags mit WMIREG_FLAG_INSTANCE_PDO festlegt, wird Pdo auf die PDO festgelegt, die an die AddDevice-Routine des Treibers übergeben wird. WMI verwendet das Gerät instance Pfad des PDO, um statische instance Namen für den Block zu generieren. Bei der Verarbeitung einer IRP_MN_REGINFO_EX-Anforderung müssen Treiber die ObReferenceObject-Routine für das in Pdo übergebene physische Geräteobjekt aufrufen. (Das System ruft automatisch ObDereferenceObject auf, um das Objekt zu dereferenzieren. Der Treiber darf dies nicht tun.)

    Der Treiber schreibt instance Namenszeichenfolgen oder eine Basisnamenzeichenfolge an den Offset, der durch InstanceNameList bzw. BaseName angegeben ist.

  3. Wenn der Treiber Blöcke im Namen eines anderen Treibers registriert (wie ein Klassentreiber möglicherweise im Namen eines Miniklassentreibers), füllt der Treiber eine andere WMIREGINFO-Struktur und eine Liste der WMIREGGUID-Strukturen mit Registrierungsinformationen für die anderen Treiberblöcke aus und legt NextWmiRegInfo im ersten WMIREGINFO auf den Offset in Bytes vom Anfang des ersten WMIREGINFO bis zum Anfang der zweiten WMIREGINFO-Struktur fest.