Création d'une requête

Pour créer une requête qui collecte des données de performances à partir d’une source ou d’un fichier journal en temps réel, appelez la fonction PdhOpenQuery . La fonction retourne un handle à la requête que vous utilisez dans les appels de fonction PDH suivants.

Après avoir créé la requête, appelez la fonction PdhAddCounter pour chaque compteur que vous souhaitez ajouter à la requête. Vous pouvez utiliser l’une des méthodes suivantes pour fournir le chemin complet du compteur.

  • Définissez le chemin du compteur en tant que chaîne statique. Utilisez cette méthode si vous surveillez toujours le même compteur et si vous êtes familiarisé avec la syntaxe correcte d’un chemin de compteur. Pour plus d’informations sur la syntaxe correcte utilisée pour spécifier un compteur, consultez Spécification d’un chemin d’accès du compteur.
  • Initialisez une structure de PDH_COUNTER_PATH_ELEMENTS avec les noms de l’ordinateur, de l’objet, du compteur et du instance. Passez cette structure à PdhMakeCounterPath qui retourne un chemin de compteur pour les éléments spécifiés.
  • Spécifiez un chemin de compteur qui contient des caractères génériques et appelez PdhExpandWildCardPath pour obtenir une liste des noms de compteur qui correspondent aux caractères génériques dans le chemin. Analysez la liste des noms de compteurs et ajoutez à la requête les compteurs que vous souhaitez dans cette liste.
  • Appelez la fonction PdhBrowseCounters pour afficher une boîte de dialogue qui permet à l’utilisateur de parcourir et de sélectionner des compteurs de performances. Pour plus d’informations, consultez Compteurs de navigation.

Notez que si un compteur instance est spécifié qui n’existe pas, PdhAddCounter ne signale pas de condition d’erreur. Au lieu de cela, il retourne ERROR_SUCCESS. La raison de ce comportement est qu’il n’est pas connu si un compteur inexistant instance a été spécifié ou un compteur qui existera mais qui n’a pas encore été créé.

Le compteur manquant instance sera signalé par PdhCollectQueryData, PdhGetRawCounterValue ou PdhGetFormattedCounterValue. Lorsque vous appelez PdhCollectQueryData pour un seul compteur instance, et que le compteur instance n’existe toujours pas, il est supposé que le compteur instance n’existera pas et que la fonction retourne PDH_NO_DATA. Toutefois, si plusieurs compteurs sont interrogés, PdhCollectQueryData peut toujours retourner ERROR_SUCCESS même si l’une des instances de compteur n’existe pas encore. Dans ce cas, appelez PdhGetRawCounterValue ou PdhGetFormattedCounterValue pour chacune des instances de compteur intéressantes. Si le instance n’existe pas lors de l’appel de PdhGetRawCounterValue, la fonction retourne ERROR_SUCCESS et définit le membre CStatus de PDH_RAW_COUNTER sur PDH_STATUS_NO_INSTANCE. Si le instance n’existe pas lors de l’appel de PdhGetFormattedCounterValue, la fonction retourne PDH_INVALID_DATA et définit le membre CStatus du PDH_FMT_COUNTERVALUE sur PDH_CSTATUS_NO_INSTANCE.

Notez que le chemin du compteur spécifié dans la fonction PdhAddCounter doit être localisé. La fonction PdhAddEnglishCounter fournit un moyen neutre pour ajouter des compteurs de performances à la requête. Cette fonction est la méthode recommandée pour ajouter des compteurs de paramètres régionaux neutres à une requête.

Pour supprimer un compteur d’une requête, appelez la fonction PdhRemoveCounter .

Une fois que vous avez terminé la collecte des données pour une requête, appelez la fonction PdhCloseQuery pour fermer la requête et libérer toutes les ressources système allouées. PdhCloseQuery ferme tous les handles de compteur associés à la requête.