Compartilhar via


Função EventRegister (evntprov.h)

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

Confira também

EnableCallback

EventWrite

EventUnregister