Fonction QueryAllTracesW (evntrace.h)
La fonction QueryAllTraces récupère les propriétés et les statistiques de toutes les sessions de suivi d’événements pour lesquelles l’appelant est autorisé à interroger.
Syntaxe
ULONG WMIAPI QueryAllTracesW(
[out] PEVENT_TRACE_PROPERTIES *PropertyArray,
[in] ULONG PropertyArrayCount,
[out] PULONG LoggerCount
);
Paramètres
[out] PropertyArray
Tableau de pointeurs vers EVENT_TRACE_PROPERTIES structures qui reçoivent des propriétés de session et des statistiques pour les sessions de suivi d’événements.
Vous devez uniquement définir les membres Wnode.BufferSize, LoggerNameOffset et LogFileNameOffset de la structure EVENT_TRACE_PROPERTIES . Les autres membres doivent tous avoir la valeur zéro.
[in] PropertyArrayCount
Nombre de structures dans le tableau PropertyArray . Cette valeur doit être inférieure ou égale à 64, soit le nombre maximal de sessions de suivi d’événements prise en charge par ETW.
Windows 10 :PropertyArrayCount peut être supérieur à 64 et certains systèmes peuvent prendre en charge plus de 64 sessions de suivi.
[out] LoggerCount
Nombre réel de sessions de suivi d’événements démarrées sur l’ordinateur.
Valeur retournée
Si la fonction réussit, la valeur de retour est ERROR_SUCCESS.
Si la fonction échoue, la valeur de retour est l’un des codes d’erreur système. Voici quelques erreurs courantes et leurs causes.
ERROR_INVALID_PARAMETER
Une des conditions suivantes est vraie :
- PropertyArrayCount est égal à zéro ou supérieur au nombre maximal de sessions prises en charge
- PropertyArray a la valeur NULL
ERROR_MORE_DATA
Le tableau de propriétés est trop petit pour recevoir des informations pour toutes les sessions (SessionCount est supérieur à PropertyArrayCount). La fonction remplit le tableau de propriétés avec le nombre de structures de propriétés spécifiées dans PropertyArrayCount.
Remarques
Les contrôleurs de trace d’événements appellent cette fonction.
Cette fonction récupère les sessions de trace que l’appelant est autorisé à interroger. Les utilisateurs s’exécutant avec des privilèges d’administration élevés, les utilisateurs du groupe Utilisateurs du journal de performances et les services exécutés en tant que LocalSystem, LocalService, NetworkService peuvent afficher toutes les sessions de suivi.
Cette fonction ne retourne pas de sessions de journalisation privées.
Pour récupérer des informations pour une seule session, utilisez la fonction ControlTrace et définissez le paramètre ControlCode sur EVENT_TRACE_CONTROL_QUERY.
Exemples
L’exemple suivant montre comment appeler cette fonction.
#include <windows.h>
#include <evntrace.h>
#include <vector>
const unsigned MAX_SESSION_NAME_LEN = 1024;
const unsigned MAX_LOGFILE_PATH_LEN = 1024;
const unsigned PropertiesSize =
sizeof(EVENT_TRACE_PROPERTIES) +
(MAX_SESSION_NAME_LEN * sizeof(CHAR)) +
(MAX_LOGFILE_PATH_LEN * sizeof(CHAR));
int main()
{
ULONG status;
std::vector<EVENT_TRACE_PROPERTIES*> sessions; // Array of pointers to property structures
std::vector<BYTE> buffer; // Buffer that contains all the property structures
ULONG sessionCount; // Actual number of sessions started on the computer
// The size of the session name and log file name used by the
// controllers are not known, therefore create a properties structure that allows
// for the maximum size of both.
try
{
sessionCount = 64; // Start with room for 64 sessions.
do
{
sessions.resize(sessionCount);
buffer.resize(PropertiesSize * sessionCount);
for (size_t i = 0; i != sessions.size(); i += 1)
{
sessions[i] = (EVENT_TRACE_PROPERTIES*)&buffer[i * PropertiesSize];
sessions[i]->Wnode.BufferSize = PropertiesSize;
sessions[i]->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
sessions[i]->LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + (MAX_SESSION_NAME_LEN * sizeof(CHAR));
}
status = QueryAllTracesA(&sessions[0], sessionCount, &sessionCount);
} while (status == ERROR_MORE_DATA);
if (status != ERROR_SUCCESS)
{
printf("Error calling QueryAllTraces: %u\n", status);
}
else
{
printf("Actual session count: %u.\n\n", sessionCount);
for (ULONG i = 0; i < sessionCount; i++)
{
WCHAR sessionGuid[50];
(void)StringFromGUID2(sessions[i]->Wnode.Guid, sessionGuid, ARRAYSIZE(sessionGuid));
printf(
"Session GUID: %ls\n"
"Session ID: %llu\n"
"Session name: %s\n"
"Log file: %s\n"
"min buffers: %u\n"
"max buffers: %u\n"
"buffers: %u\n"
"buffers written: %u\n"
"buffers lost: %u\n"
"events lost: %u\n"
"\n",
sessionGuid,
sessions[i]->Wnode.HistoricalContext,
(PCSTR)((LPCBYTE)sessions[i] + sessions[i]->LoggerNameOffset),
(PCSTR)((LPCBYTE)sessions[i] + sessions[i]->LogFileNameOffset),
sessions[i]->MinimumBuffers,
sessions[i]->MaximumBuffers,
sessions[i]->NumberOfBuffers,
sessions[i]->BuffersWritten,
sessions[i]->LogBuffersLost,
sessions[i]->EventsLost);
}
}
}
catch (std::bad_alloc const&)
{
printf("Error allocating memory for properties.\n");
status = ERROR_OUTOFMEMORY;
}
return status;
}
Notes
L’en-tête evntrace.h définit QueryAllTraces en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | evntrace.h |
Bibliothèque | Sechost.lib sur Windows 8.1 et Windows Server 2012 R2 ; Advapi32.lib sur Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista et Windows XP |
DLL | Sechost.dll sur Windows 8.1 et Windows Server 2012 R2 ; Advapi32.dll sur Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista et Windows XP |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour