Função QueryAllTracesW (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 QueryAllTracesW(
[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 de sessão e estatísticas para as sessões de rastreamento de eventos.
Você só precisa definir osWnode.BufferSize
[in] PropertyArrayCount
Número de estruturas na matriz
Windows 10:PropertyArrayCount pode ser maior que 64 e alguns sistemas podem dar suporte a mais de 64 sessões de rastreamento.
[out] LoggerCount
Número real de sessões de rastreamento de eventos iniciadas no computador.
Valor de retorno
Se a função for bem-sucedida, 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 opçõ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.
Observações
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 de Log de Desempenho e serviços em execução como LocalSystem, LocalService, NetworkService podem exibir todas as 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
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(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;
}
Nota
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 do 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 Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 2000 Professional [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows 2000 Server [somente aplicativos da área de trabalho] |
da Plataforma de Destino |
Windows |
cabeçalho | evntrace.h |
biblioteca | Sechost.lib no 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 |
de DLL |
Sechost.dll no Windows 8.1 e no 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 |