Freigeben über


Definieren von WMI-Instanznamen

Ein instance eines WMI-Blocks enthält Daten, die von einem bestimmten physischen Gerät oder einer bestimmten Softwarekomponente bereitgestellt werden. Genau wie die GUID eines Blocks den Block eindeutig identifiziert, identifiziert der Name eines instance eindeutig, dass instance eines Blocks. WMI-Clientanwendungen verwenden instance Namen, um die in einem Datenblock zurückgegebenen Informationen dem Gerät oder der Komponente zuzuordnen, die die Daten bereitgestellt hat. WMI verwendet instance Namen, um zu bestimmen, an welches Gerät eine Anforderung gesendet werden soll. Es wird dringend empfohlen, dass Treiber ihre PDO verwenden, wenn sie instance Namen definieren.

Ein Treiber kann instance Namen für einen Block auf zwei Arten definieren:

  • Der Treiber übergibt eine Liste statischer instance Namen an WMI, wenn er den Block registriert.

    Nachdem der Block registriert wurde, geben sowohl der Treiber als auch WMI einen instance Namen anhand des Indexes in dieser Liste an. Statische instance Namen können auf dem Gerät instance ID des PDO eines Treibers oder einem vom Treiber definierten Basisnamen basieren, oder der Treiber kann eine Liste mit instance Namenszeichenfolgen definieren. Statische instance Namen bleiben bestehen, bis der Treiber sie durch erneute Registrierung des Blocks explizit ändert.

  • Der Treiber generiert dynamische instance Namen, wenn Instanzen erstellt werden.

    Der Treiber gibt an, dass er dynamische instance Namen für einen Block generiert, wenn er den Block registriert. Nachdem der Block registriert wurde, übergeben sowohl der Treiber als auch WMI dynamische instance Namen als Zeichenfolgen im Puffer unter Parameters.WMI.Buffer.

Ein Treiber sollte nur dann dynamische instance-Namen generieren, wenn sich die Anzahl der Instanzen oder instance Namen eines Datenblocks zur Laufzeit häufig ändert. Beispielsweise kann ein Treiber Prozess-IDs oder die IP-Adressen von TCP/IP-Verbindungen als instance Namen verwenden. Solche instance Namen sollten dynamisch sein. Wären sie statisch, würde der Treiber erheblichen Mehraufwand verursachen, da er IoWMIRegistrationControl aufrufen müsste, um die Anzahl und die Namen von Instanzen bei jeder Änderung zu aktualisieren.

In den meisten Fällen sind statische instance Namen dynamischen instance Namen aus den folgenden Gründen vorzuziehen:

  • Statische instance Namen verbessern die Leistung eines Treibers, da der Treiber keine instance Namenszeichenfolgen als Antwort auf WMI-Anforderungen zurückgeben muss, da dies für dynamische instance Namen erforderlich ist.

  • WMI kann statische instance Namenskonflikte bei der Registrierung erkennen und die instance Namen bei Bedarf automatisch ändern, sodass alle instance Namen für einen bestimmten Block eindeutig sind, unabhängig davon, wie viele Treiber den Block registrieren.

    WMI kann keine instance Namenskollisionen für dynamische instance-Namen erkennen. Daher ist der Treiber für die Generierung eindeutiger Namen mithilfe von IoWMIAllocateInstanceIds verantwortlich.

  • Ein Treiber kann die WMI-Bibliotheksroutinen verwenden, um IRPs für einen Block zu verarbeiten, der statische instance Namen verwendet, solange die Namen auf dem PDO des Treibers oder einem vom Treiber definierten Basisnamen basieren.

    Ein Treiber kann keine WMI-Bibliotheksroutinen verwenden, um IRPs für einen Datenblock zu verarbeiten, der dynamische instance Namen verwendet.

Ein Treiber gibt an, ob ein Block statische oder dynamische instance Namen und den Typ statischer instance Namen verwendet, indem WMIREG_FLAG_XXX in der WMIREGGUID- oder WMIGUIDREGINFO-Struktur festgelegt oder gelöscht wird, die er beim Registrieren des Blocks an WMI übergibt. Weitere Informationen finden Sie unter Registrieren als WMI-Datenanbieter.