Função ControlTraceW (evntrace.h)
A função ControlTrace libera, consulta, atualiza ou interrompe a sessão de rastreamento de eventos especificada.
Sintaxe
ULONG WMIAPI ControlTraceW(
CONTROLTRACE_ID TraceId,
[in] LPCWSTR InstanceName,
[in, out] PEVENT_TRACE_PROPERTIES Properties,
[in] ULONG ControlCode
);
Parâmetros
TraceId
[in] InstanceName
Nome de uma sessão de rastreamento de eventos ou NULL. Você deve especificar InstanceName se TraceHandle for 0.
Para especificar a sessão do Agente do Kernel NT, defina InstanceNamecomo KERNEL_LOGGER_NAME.
[in, out] Properties
Ponteiro para uma estrutura de EVENT_TRACE_PROPERTIES inicializada. Essa estrutura deve ser zerado antes de definir qualquer campo.
Se ControlCodeespecificar EVENT_TRACE_CONTROL_STOP, EVENT_TRACE_CONTROL_QUERY ou EVENT_TRACE_CONTROL_FLUSH, você só precisará definir os membros Wnode.BufferSize, Wnode.Guid, LoggerNameOffset e LogFileNameOffset da estrutura EVENT_TRACE_PROPERTIES . Se a sessão for privada, você também precisará definir LogFileMode. Você pode usar o nome máximo da sessão (1024 caracteres) e os comprimentos máximos do nome do arquivo de log (1024 caracteres) para calcular o tamanho e os deslocamentos do buffer, se não forem conhecidos.
Se ControlCodeespecificar EVENT_TRACE_CONTROL_UPDATE, na entrada, os membros deverão especificar os novos valores para as propriedades a serem atualizadas. Na saída, Properties contém as propriedades e estatísticas para a sessão de rastreamento de eventos. Você pode atualizar as propriedades a seguir.
EnableFlags: defina esse membro como 0 para desabilitar todos os provedores do sistema. Defina isso como um valor diferente de zero para especificar os provedores de sistema que você deseja habilitar ou manter habilitados. Isso pode ser diferente de zero somente para agentes do sistema.
FlushTimer: defina esse membro se quiser alterar o tempo de espera antes de liberar buffers. Se esse membro for 0, o membro não será atualizado.
LogFileNameOffset: defina esse membro se você quiser alternar para outro arquivo de log ou para liberar um rastreamento de modo de buffer para um novo arquivo de log. Se esse membro for 0, o nome do arquivo não será atualizado. Se o deslocamento não for zero e você não alterar o nome do arquivo de log, a função retornará um erro.
LogFileMode: defina esse membro se quiser ativar e desativar EVENT_TRACE_REAL_TIME_MODE . Para desativar o tempo real, defina esse membro como 0. Para ativar o tempo real (criando uma sessão que registra em disco, bem como entregando eventos em tempo real), defina esse membro como EVENT_TRACE_REAL_TIME_MODE e ele será OR'd com os modos atuais.
MaximumBuffers: defina esse membro se quiser alterar o número máximo de buffers que o ETW usa. Se esse membro for 0, o membro não será atualizado.
Para sessões de agente privado, você pode atualizar apenas os membros LogFileNameOffset e FlushTimer .
Se você estiver usando uma estrutura de EVENT_TRACE_PROPERTIES recém-inicializada, zera a estrutura e defina Wnode.BufferSize, Wnode.Guid e Wnode.Flags e os valores que deseja atualizar.
Se você estiver reutilizando uma estrutura EVENT_TRACE_PROPERTIES (ou seja, usando uma estrutura passada anteriormente para StartTrace ou ControlTrace), defina o membro LogFileNameOffset como 0, a menos que você esteja alterando o nome do arquivo de log e certifique-se de definir EVENT_TRACE_PROPERTIES. Wnode.Flags para WNODE_FLAG_TRACED_GUID.
A partir do Windows 10, versão 1703: Para melhorar o desempenho em cenários de processo cruzado, agora você pode passar informações de filtragem para ControlTrace para agentes privados de todo o sistema. Você precisará usar a estrutura EVENT_TRACE_PROPERTIES_V2 para incluir informações de filtragem. Consulte Configurando e iniciando uma sessão de agente privado para obter mais detalhes.
[in] ControlCode
Função de controle solicitada. É possível especificar um dos seguintes valores:
EVENT_TRACE_CONTROL_FLUSH: libera os buffers ativos da sessão.
Isso pode ser usado com uma sessão na memória (uma sessão iniciada com o sinalizador EVENT_TRACE_BUFFERING_MODE ) para gravar os dados do rastreamento em um arquivo.
Normalmente, você não precisa liberar sessões baseadas em arquivo ou em tempo real porque o ETW liberará automaticamente um buffer quando ele estiver cheio (ou seja, quando ele não tiver espaço para o próximo evento), quando o FlushTimer da sessão de rastreamento expirar ou quando a sessão de rastreamento for fechada.
Windows 2000: Não há suporte para esse valor.
EVENT_TRACE_CONTROL_QUERY: recupera as propriedades e estatísticas da sessão.
EVENT_TRACE_CONTROL_STOP: interrompe a sessão. O identificador de sessão não é mais válido.
EVENT_TRACE_CONTROL_UPDATE: atualiza as propriedades da sessão.
EVENT_TRACE_CONTROL_INCREMENT_FILE: se a sessão tiver o
EVENT_TRACE_FILE_MODE_NEWFILE
, atualizará a sessão para alternar para o próximo arquivo imediatamente, em vez de aguardar o preenchimento do arquivo anterior. Com suporte a partir da Atualização de outubro de 2018 do Windows 10.EVENT_TRACE_CONTROL_CONVERT_TO_REALTIME: altera uma sessão de modo de arquivo para uma sessão em tempo real (habilita a entrega em tempo real e desabilita a gravação de eventos no arquivo ETL). Com suporte a partir da Atualização de outubro de 2020 do Windows 10.
Observação
Não é seguro liberar buffers ou interromper uma sessão de rastreamento de DllMain (pode causar deadlock).
Retornar valor
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_BAD_LENGTH
Uma das seguintes condições é verdadeira:
- O membro Wnode.BufferSize de Properties especifica um tamanho incorreto.
- As propriedades não têm espaço suficiente alocado para manter uma cópia do nome da sessão e do nome do arquivo de log (se usado).
ERROR_INVALID_PARAMETER
Uma das seguintes condições é verdadeira:
- As propriedades são NULL.
- InstanceName e TraceHandle são NULL.
- InstanceName é NULL e TraceHandle não é um identificador válido.
- O membro LogFileNameOffset de Properties não é válido.
- O membro LoggerNameOffset de Properties não é válido.
- O membro LogFileMode de Properties especifica uma combinação de sinalizadores que não são válidos.
- O membro Wnode.Guid de Properties é SystemTraceControlGuid, mas o parâmetro InstanceName não
KERNEL_LOGGER_NAME
é .
ERROR_BAD_PATHNAME
Outra sessão já está usando o nome de arquivo especificado pelo membro LogFileNameOffset da estrutura Properties .
ERROR_MORE_DATA
O buffer para EVENT_TRACE_PROPERTIES é muito pequeno para conter todas as informações da sessão. Se você não precisar das informações de propriedade da sessão, poderá ignorar esse erro. Se você receber esse erro ao interromper a sessão, o ETW já terá interrompido a sessão antes de gerar esse erro.
ERROR_ACCESS_DENIED
Somente 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 controlar sessões de rastreamento de eventos. Para conceder a um usuário restrito a capacidade de controlar sessões de rastreamento, adicione-as ao grupo Usuários do Log de Desempenho. Somente usuários com privilégios administrativos e serviços em execução como LocalSystem podem controlar uma sessão do Agente de Kernel NT.
Windows XP e Windows 2000: Qualquer pessoa pode controlar uma sessão de rastreamento.
ERROR_WMI_INSTANCE_NOT_FOUND
A sessão fornecida não está em execução.
ERROR_ACTIVE_CONNECTIONS
Quando retornado de uma chamada EVENT_TRACE_CONTROL_STOP, isso indica que a sessão já está em processo de interrupção.
Comentários
Os controladores de rastreamento de eventos chamam essa função.
Essa função substitui as funções FlushTrace, QueryTrace, StopTrace e UpdateTrace .
Observação
O cabeçalho evntrace.h define ControlTrace 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
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP] |
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 |
DLL | Sechost.dll no Windows 8.1 e no Windows Server 2012; Advapi32.dll no Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista e Windows XP |