Freigeben über


Verwenden von Kernelmodusleistungsindikatoren

Kernelmoduskomponenten stellen Leistungsindikatoren mithilfe der Leistungsindikatoren für Windows -APIs (PCW) bereit.

Führen Sie die folgenden Schritte aus, um neue Zählerdatenanbieter zu entwickeln:

  1. Schreiben Sie ein Zählermanifest , das den Anbieter und seine Countersets beschreibt. Das Leistungsindikatormanifest ist eine XML-Formatdatei, die den Leistungsindikatoranbieter und die zugehörigen Leistungsindikatoren definiert.

    • Legen Sie das applicationIdentity Attribut auf den Namen einer Binärdatei fest, die als Teil Ihrer Kernelmoduskomponente installiert wird und die die Zeichenfolgenressourcen enthält, die von Leistungsdatenconsumern benötigt werden.
    • Legen Sie das providerType-Attribut auf kernelMode fest.
    • Definieren Sie mindestens ein struct Element (unter counterSet/structs) mit dem Namen einer C/C++-Struktur, die verwendet wird, wenn Zählerwerte von Ihrer Komponente an die PCW-APIs übergeben werden.
    • Definieren Sie in jedem counterdie struct - und field aus denen PCW den Zählerwert lesen soll.
  2. Verwenden Sie im Rahmen des Buildprozesses für Ihre Komponente das CTRPP-Tool , um das Zählermanifest zu kompilieren. (Das CTRPP-Tool (Counter Preprocessor) ist im WDK enthalten und an der Developer-Eingabeaufforderung verfügbar, indem ctrppSie eingeben.) Das CTRPP-Tool generiert eine .rc Datei und eine .h Datei.

    • Die von CTRPP generierte .rc Datei muss vom Tool Resource Compiler (RC.exe) kompiliert werden, und die resultierende .res Datei muss mit der Binärdatei verknüpft werden, die applicationIdentity im Attribut benannt ist. Sie können die von CTRPP generierte .rc Datei entweder direkt kompilieren oder #include die von CTRPP generierte .rc Datei in eine vorhandene .rc Datei, die in die Binärdatei kompiliert wird.
    • Die von CTRPP generierte .h Datei enthält Hilfsfunktionen, die die zugrunde liegenden PCW-APIs umschließen. Die von CTRPP generierte .h Datei enthält z. B. die Funktion RegisterXxx , die in Ihrem Namen aufruft PcwRegister . In den meisten Fällen rufen Sie die von CTRPP generierten Hilfsfunktionen auf, anstatt alle PCW-APIs direkt aufzurufen, aber Sie können die Dokumentation für die PCW-APIs lesen, um zu verstehen, was die entsprechenden CTRPP-generierten Funktionen tun. Die Hilfsfunktionen verwalten die Übersetzung des Zählerdatenlayouts der Komponente in das Layout, das PCW_DATA von den PCW-APIs erwartet wird.
  3. Rufen Sie bei der Komponenteninitialisierung die von CTRPP generierte RegisterXxx-Funktion auf, die PcwRegister aufruft. Rufen Sie beim Herunterfahren der Komponente die von CTRPP generierte Xxx-Funktion Unregisterauf , die PcwUnregister aufruft.

  4. Fügen Sie Code hinzu, um Zählerdaten bereitzustellen. Dazu wird entweder eine PCW_CALLBACK Rückruffunktion implementiert oder Datenstrukturen mit Zählerwerten für die einzelnen instance beibehalten und die von CTRPP generierten Funktionen CreateInstanceXxx und CloseInstanceXxx aufgerufen, wenn Instanzen erstellt und zerstört werden.

  5. Verwenden Sie lodctr /m:<CounterManifest> <InstallPath> bei der Komponenteninstallation, um den Anbieter zu installieren. Verwenden Sie unlodctr bei der Komponenteninstallation (mit /m den Parametern oder /g ), um den Anbieter zu deinstallieren. Durch die Installation des Anbieters werden die Leistungsindikatoren des Anbieters einem systemweiten Repository verfügbarer Leistungsindikatoren hinzugefügt, sodass die Leistungsindikatoren von Leistungsdatenconsumern wie perfmon, typeperf oder WMI verwendet werden können. Insbesondere zeichnet die Installation des Anbieters den vollständigen Pfad zur Binärdatei (DLL, SYS oder EXE-Datei) auf, die die Zeichenfolgentabelle des Anbieters enthält. Der vollständige Pfad zur Binärdatei wird bestimmt, indem das Attribut des Manifests applicationIdentity mit den in der <CounterManifest>lodctr Befehlszeile verwendeten Werten und <InstallPath> wie folgt kombiniert wird:

    • Wenn das applicationIdentity Attribut ein vollständiger Pfad ist, wird es verwendet.
    • Andernfalls wird der <InstallationPath> Parameter verwendet, wenn es sich um einen vollständigen Pfad handelt.
    • Wenn der <CounterManifest> Parameter ein vollständiger Pfad ist, wird das Verzeichnis aus <CounterManifest> mit dem Dateinamen aus dem applicationIdentity Attribut kombiniert.
    • Andernfalls wird das aktuelle Arbeitsverzeichnis mit dem Dateinamen aus dem applicationIdentity Attribut kombiniert.

Ein Beispiel für einen PCW-Anbieter im Kernelmodus finden Sie unter Kernel Counter Sample (Kcs) im Windows-Treiberbeispielrepository auf GitHub.

Weitere Informationen

Leistungsüberwachung im Kernelmodus

PcwRegister

PCW_CALLBACK

Schema der Leistungsindikatoren

CTRPP-Tool