Compartilhar via


Função QueryAllTracesA (evntrace.h)

A função QueryAllTraces recupera as propriedades e estatísticas de todas as sessões de rastreamento de eventos para as quais o chamador tem permissões para consultar.

Sintaxe

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

Parâmetros

[out] PropertyArray

Uma matriz de ponteiros para EVENT_TRACE_PROPERTIES estruturas que recebem propriedades e estatísticas de sessão para as sessões de rastreamento de eventos.

Você só precisa definir os membros Wnode.BufferSize, LoggerNameOffset e LogFileNameOffset da estrutura EVENT_TRACE_PROPERTIES . Todos os outros membros devem ser definidos como zero.

[in] PropertyArrayCount

Número de estruturas na matriz PropertyArray . Esse valor deve ser menor ou igual a 64, o número máximo de sessões de rastreamento de eventos compatíveis com o ETW.

O Windows 10:PropertyArrayCount pode ser maior que 64 e alguns sistemas podem dar suporte a mais de 64 sessões de rastreamento.

[out] LoggerCount

Recebe o número de rastreamentos para os quais os dados são retornados. Isso pode ser diferente do número real de sessões de rastreamento de eventos em execução se o chamador não tiver permissões para consultar todas as sessões.

Valor retornado

Se a função obtiver êxito, o valor retornado será ERROR_SUCCESS.

Se a função falhar, o valor retornado será um dos códigos de erro do sistema. Veja a seguir alguns erros comuns e suas causas.

  • ERROR_INVALID_PARAMETER

    Uma das seguintes condições é verdadeira:

    • PropertyArrayCount é zero ou maior que o número máximo de sessões com suporte
    • PropertyArray é NULL
  • ERROR_MORE_DATA

    A matriz de propriedades é muito pequena para receber informações para todas as sessões (SessionCount é maior que PropertyArrayCount). A função preenche a matriz de propriedades com o número de estruturas de propriedade especificadas em PropertyArrayCount.

Comentários

Os controladores de rastreamento de eventos chamam essa função.

Essa função recupera as sessões de rastreamento que o chamador tem permissões para consultar. Os usuários em execução com privilégios administrativos elevados, usuários no grupo Usuários do Log de Desempenho e serviços em execução como LocalSystem, LocalService, NetworkService podem exibir a maioria das sessões de rastreamento.

Essa função não retorna sessões de log privado.

Para recuperar informações de uma única sessão, use a função ControlTrace e defina o parâmetro ControlCode como EVENT_TRACE_CONTROL_QUERY.

Exemplos

O exemplo a seguir mostra como chamar essa função.

#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;
}

Observação

O cabeçalho evntrace.h define QueryAllTraces como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho evntrace.h
Biblioteca Sechost.lib em Windows 8.1 e Windows Server 2012 R2; Advapi32.lib no Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista e Windows XP
DLL Sechost.dll em Windows 8.1 e Windows Server 2012 R2; Advapi32.dll no Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista e Windows XP

Confira também

ControlTrace

EVENT_TRACE_PROPERTIES

EnumerateTraceGuids