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:
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 aufkernelMode
fest. - Definieren Sie mindestens ein
struct
Element (untercounterSet/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
counter
diestruct
- undfield
aus denen PCW den Zählerwert lesen soll.
- Legen Sie das
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
ctrpp
Sie 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, dieapplicationIdentity
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 aufruftPcwRegister
. 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, dasPCW_DATA
von den PCW-APIs erwartet wird.
- Die von CTRPP generierte
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.
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.
Verwenden Sie
lodctr /m:<CounterManifest> <InstallPath>
bei der Komponenteninstallation, um den Anbieter zu installieren. Verwenden Sieunlodctr
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 ManifestsapplicationIdentity
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 demapplicationIdentity
Attribut kombiniert. - Andernfalls wird das aktuelle Arbeitsverzeichnis mit dem Dateinamen aus dem
applicationIdentity
Attribut kombiniert.
- Wenn das
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