Partager via


Utilisation de compteurs de performances en mode noyau

Les composants en mode noyau fournissent des compteurs de performances à l’aide des API Compteurs de performances pour Windows (PCW).

Utilisez les étapes suivantes pour développer de nouveaux fournisseurs de données de compteur :

  1. Écrivez un manifeste de compteur qui décrit le fournisseur et ses ensembles de compteurs. Le manifeste du compteur est un fichier au format XML qui définit le fournisseur de compteur de performances et ses compteurs.

    • Définissez l’attribut applicationIdentity sur le nom d’un fichier binaire qui sera installé dans le cadre de votre composant en mode noyau et qui contiendra les ressources de chaîne nécessaires aux consommateurs de données de performance.
    • Affectez à l'attribut providerType la valeur kernelMode.
    • Définissez au moins un struct élément (sous counterSet/structs) avec le nom d’une structure C/C++ qui sera utilisée lors du passage des valeurs de compteur de votre composant aux API PCW.
    • Dans chaque counter, définissez le struct et field à partir duquel PCW doit lire la valeur du compteur.
  2. Dans le cadre du processus de génération de votre composant, utilisez l’outil CTRPP pour compiler le manifeste du compteur. (L’outil CTRPP (Counter Preprocessor) est inclus dans le WDK et est disponible à l’invite de commandes développeur en tapant ctrpp.) L’outil CTRPP génère un .rc fichier et un .h fichier.

    • Le fichier généré .rc par CTRPP doit être compilé par l’outil compilateur de ressources (RC.exe), et le fichier résultant .res doit être lié au fichier binaire nommé dans l’attribut applicationIdentity . Vous pouvez soit compiler directement le fichier généré par .rc CTRPP, soit #include le fichier généré par .rc CTRPP dans un fichier existant .rc qui est en cours de compilation dans le fichier binaire.
    • Le fichier généré par .h CTRPP contient des fonctions d’assistance qui encapsulent les API PCW sous-jacentes. Par exemple, le fichier généré par .h CTRPP contient une fonction RegisterXxx qui appelle PcwRegister en votre nom. Dans la plupart des cas, vous appelez les fonctions d’assistance générées par CTRPP au lieu d’appeler directement les API PCW, mais vous pouvez consulter la documentation des API PCW pour comprendre ce que font les fonctions générées par CTRPP correspondantes. Les fonctions d’assistance gèrent la traduction de la disposition des données de compteur du composant dans la PCW_DATA disposition attendue par les API PCW.
  3. Lors de l’initialisation du composant, appelez la fonction RegisterXxx générée par CTRPP, qui appelle PcwRegister. À l’arrêt du composant, appelez la fonction UnregisterXxx générée par CTRPP, qui appelle PcwUnregister.

  4. Ajoutez du code pour fournir des données de compteur. Pour ce faire, vous implémentez une fonction de rappel PCW_CALLBACK ou en conservant des structures de données avec des valeurs de compteur pour chaque instance et en appelant les fonctions CreateInstanceXxx et CloseInstanceXxx générées par CTRPP lorsque les instances sont créées et détruites.

  5. Lors de l’installation du composant, utilisez lodctr /m:<CounterManifest> <InstallPath> pour installer le fournisseur. Lors de la désinstallation du composant, utilisez unlodctr (avec /m ou /g des paramètres) pour désinstaller le fournisseur. L’installation du fournisseur ajoute les compteurs du fournisseur à un référentiel à l’échelle du système de compteurs disponibles afin que les compteurs puissent être utilisés par les consommateurs de données de performance tels que perfmon, typeperf ou WMI. En particulier, l’installation du fournisseur enregistre le chemin d’accès complet au fichier binaire (fichier DLL, SYS ou EXE) qui contient la table de chaînes du fournisseur. Le chemin complet du fichier binaire est déterminé en combinant l’attribut du applicationIdentity manifeste avec les <CounterManifest> valeurs et <InstallPath> utilisées sur la lodctr ligne de commande comme suit :

    • Si l’attribut applicationIdentity est un chemin d’accès complet, il sera utilisé.
    • Sinon, si le <InstallationPath> paramètre est un chemin d’accès complet, il sera utilisé.
    • Sinon, si le <CounterManifest> paramètre est un chemin d’accès complet, le répertoire de <CounterManifest> sera combiné avec le nom de fichier de l’attribut applicationIdentity .
    • Sinon, le répertoire de travail actuel sera combiné avec le nom de fichier de l’attribut applicationIdentity .

Pour obtenir un exemple de fournisseur PCW en mode noyau, consultez l’exemple de compteur de noyau (Kcs) dans le référentiel d’exemples de pilotes Windows sur GitHub.

Voir aussi

Analyse des performances en mode noyau

PcwRegister

PCW_CALLBACK

Schéma des compteurs de performance

Outil CTRPP