Compartir a través de


Función QueryAllTracesA (evntrace.h)

La función QueryAllTraces recupera las propiedades y estadísticas de todas las sesiones de seguimiento de eventos para las que el autor de la llamada tiene permisos para consultar.

Sintaxis

ULONG WMIAPI QueryAllTracesA(
  [out] PEVENT_TRACE_PROPERTIES *PropertyArray,
  [in]  ULONG                   PropertyArrayCount,
  [out] PULONG                  LoggerCount
);

Parámetros

[out] PropertyArray

Matriz de punteros a EVENT_TRACE_PROPERTIES estructuras que reciben estadísticas y propiedades de sesión para las sesiones de seguimiento de eventos.

Solo tiene que establecer los miembros Wnode.BufferSize, LoggerNameOffset y LogFileNameOffset de la estructura EVENT_TRACE_PROPERTIES . Todos los demás miembros deben establecerse en cero.

[in] PropertyArrayCount

Número de estructuras de la matriz PropertyArray . Este valor debe ser menor o igual que 64, el número máximo de sesiones de seguimiento de eventos que admite ETW.

Windows 10:PropertyArrayCount puede ser mayor que 64 y algunos sistemas pueden admitir más de 64 sesiones de seguimiento.

[out] LoggerCount

Recibe el número de seguimientos para los que se devuelven los datos. Esto puede diferir del número real de sesiones de seguimiento de eventos en ejecución si el autor de la llamada no tiene permisos para consultar todas las sesiones.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es ERROR_SUCCESS.

Si se produce un error en la función, el valor devuelto es uno de los códigos de error del sistema. A continuación se muestran algunos errores comunes y sus causas.

  • ERROR_INVALID_PARAMETER

    Una de las siguientes condiciones se cumple:

    • PropertyArrayCount es cero o mayor que el número máximo de sesiones admitidas
    • PropertyArray es NULL
  • ERROR_MORE_DATA

    La matriz de propiedades es demasiado pequeña para recibir información para todas las sesiones (SessionCount es mayor que PropertyArrayCount). La función rellena la matriz de propiedades con el número de estructuras de propiedad especificadas en PropertyArrayCount.

Comentarios

Los controladores de seguimiento de eventos llaman a esta función.

Esta función recupera las sesiones de seguimiento que el autor de la llamada tiene permisos para consultar. Los usuarios que se ejecutan con privilegios administrativos elevados, los usuarios del grupo Usuarios del registro de rendimiento y los servicios que se ejecutan como LocalSystem, LocalService, NetworkService pueden ver la mayoría de las sesiones de seguimiento.

Esta función no devuelve sesiones de registro privadas.

Para recuperar información de una sola sesión, use la función ControlTrace y establezca el parámetro ControlCodeen EVENT_TRACE_CONTROL_QUERY.

Ejemplos

En el ejemplo siguiente se muestra cómo llamar a esta función.

#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(WCHAR)) +
    (MAX_LOGFILE_PATH_LEN * sizeof(WCHAR));

int wmain()
{
    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(WCHAR));
            }

            status = QueryAllTracesW(&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: %ls\n"
                    "Log file: %ls\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,
                    (PCWSTR)((LPCBYTE)sessions[i] + sessions[i]->LoggerNameOffset),
                    (PCWSTR)((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;
}

Nota

El encabezado evntrace.h define QueryAllTraces como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado evntrace.h
Library Sechost.lib en Windows 8.1 y Windows Server 2012 R2; Advapi32.lib en Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista y Windows XP
Archivo DLL Sechost.dll en Windows 8.1 y Windows Server 2012 R2; Advapi32.dll en Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista y Windows XP

Consulte también

ControlTrace

EVENT_TRACE_PROPERTIES

EnumerateTraceGuids