Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Registra um provedor de eventos ETW, criando um identificador que pode ser usado para gravar eventos ETW.
Sintaxe
ULONG EVNTAPI EventRegister(
[in] LPCGUID ProviderId,
[in, optional] PENABLECALLBACK EnableCallback,
[in, optional] PVOID CallbackContext,
[out] PREGHANDLE RegHandle
);
Parâmetros
[in] ProviderId
GUID que identifica exclusivamente o provedor, às vezes chamado de GUID de controle. Esse deve ser um identificador estável para que os controladores de rastreamento possam usar o GUID para assinar eventos desse provedor.
[in, optional] EnableCallback
EnableCallback opcional que o ETW invocará quando uma sessão de rastreamento habilitar ou desabilitar esse provedor. Use NULL se nenhum retorno de chamada for necessário.
[in, optional] CallbackContext
Dados de contexto opcionais que o ETW fornecerá ao invocar EnableCallback. Use NULL se nenhum contexto de retorno de chamada for necessário.
[out] RegHandle
Recebe o identificador de registro do provedor de eventos. O identificador é usado em chamadas subsequentes para APIs do provedor, como EventWrite, EventProviderEnabled e EventRegister.
Antes que o provedor descarregue ou saia, libere o identificador de registro do provedor chamando EventUnregister. Uma DLL que descarrega sem liberar todos os identificadores do provedor registrados pode causar falha no processo.
Valor retornado
Retorna ERROR_SUCCESS se tiver êxito.
O código de erro retornado por EventRegister destina-se principalmente ao uso em cenários de depuração e diagnóstico. A maioria dos códigos de produção deve continuar a ser executada mesmo se um provedor ETW não tiver sido registrado, portanto, os builds de versão geralmente devem ignorar o código de erro retornado por EventRegister.
Comentários
EventRegister cria um identificador que você pode usar para gravar eventos ETW por meio de EventWrite, EventWriteTransfer ou EventWriteEx.
Observação
A maioria dos provedores de eventos não chamará EventRegister diretamente. Em vez disso, a maioria dos provedores de eventos é implementada usando uma estrutura ETW que encapsula as chamadas para EventRegister, EventWrite e EventUnregister. Por exemplo, você pode escrever um manifesto de evento e usar o Compilador de Mensagens para gerar código C/C++ para os eventos ou pode usar TraceLogging para evitar a necessidade de um manifesto.
O registro de um provedor de eventos não deve ser confundido com a instalação do manifesto de um provedor de eventos.
- A API EventRegister executa o registro de um provedor de eventos para criar um identificador de provedor. Essa é uma operação de escopo de processo (o identificador é válido somente dentro do processo). O identificador pode ser usado para gravar eventos ETW. Todos os eventos gravados usando o identificador serão marcados com a ProviderId especificada durante o registro do provedor. Não é necessário instalar um manifesto para gravar eventos ou capturar rastreamentos (embora a instalação do manifesto possa ser necessária para decodificar os eventos do provedor ou para que o provedor trabalhe com o Log de Eventos).
- A ferramenta wevtutil.exe é usada para instalar ou desinstalar o manifesto de um provedor de eventos. A instalação de um manifesto do provedor de eventos significa que as informações do manifesto são registradas no sistema. As informações registradas são globais do sistema e persistem até que o manifesto seja desinstalado. As informações gravadas incluem os nomes, GUIDs, canais e caminhos de DLL de recurso dos provedores definidos no manifesto. As informações do manifesto são usadas pelas ferramentas de decodificação de rastreamento e pelo Log de Eventos.
A maioria dos componentes registrará seu provedor de eventos na inicialização do componente e cancelará o registro do provedor de eventos no desligamento do componente. Por exemplo, um aplicativo (EXE) pode se registrar durante a inicialização do aplicativo e cancelar o registro durante a saída do aplicativo. Uma DLL (biblioteca dinâmica) pode se registrar DllMain durante a anexação do processo e pode cancelar o registro durante DllMain o desanexamento do processo.
Como o rastreamento de eventos é uma preocupação de depuração/diagnóstico e normalmente não é uma funcionalidade crítica ao aplicativo, a maioria dos aplicativos de varejo deve ignorar silenciosamente as falhas retornadas por EventRegister. Em caso de falha, EventRegister definirá o parâmetro RegHandle como zero para que os usos subsequentes do RegHandle (ou seja, em chamadas para EventWrite e EventUnregister) não tenham efeito.
Cada processo pode registrar até 1.024 provedores. No entanto, você deve limitar o número de provedores que seu componente registra para um ou dois. Esse limite inclui provedores registrados usando essa função e provedores registrados usando RegisterTraceGuids.
Antes do Windows Vista: Não há nenhum limite específico para o número de provedores que um processo pode registrar.
Requisitos
| Cliente mínimo com suporte | Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
| Servidor mínimo com suporte | Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP] |
| Plataforma de Destino | Windows |
| Cabeçalho | evntprov.h |
| Biblioteca | Advapi32.lib |
| DLL | Advapi32.dll |