Share via


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

ControlTrace

EVENT_TRACE_PROPERTIES

EnumerateTraceGuids