Compartilhar via


Função TraceMessage (evntrace.h)

Um provedor de eventos baseado em RegisterTraceGuids ("Clássico") usa a função TraceMessage para enviar um evento WPP baseado em mensagem (baseado em TMF) para uma sessão de rastreamento de eventos.

Sintaxe

ULONG TraceMessage(
  [in] TRACEHANDLE LoggerHandle,
  [in] ULONG       MessageFlags,
  [in] LPCGUID     MessageGuid,
  [in] USHORT      MessageNumber,
       ...         
);

Parâmetros

[in] LoggerHandle

Manipule para a sessão de rastreamento de eventos que registra o evento. O provedor obtém o identificador quando chama a função GetTraceLoggerHandle em sua implementação ControlCallback .

[in] MessageFlags

Adiciona informações adicionais ao início da seção de dados específicos do provedor do evento. A seção de dados específicos do provedor do evento conterá dados somente para os sinalizadores que estão definidos. A lista variável de dados de argumento seguirá essas informações. Esse parâmetro pode usar um dos valores a seguir.

  • TRACE_MESSAGE_COMPONENTID

    Inclua o identificador de componente na mensagem. O parâmetro MessageGuid contém o identificador de componente.

  • TRACE_MESSAGE_GUID

    Inclua o GUID da classe de rastreamento de eventos na mensagem. O parâmetro MessageGuid contém o GUID da classe de rastreamento de eventos.

  • TRACE_MESSAGE_SEQUENCE

    Inclua um número de sequência na mensagem. O número da sequência começa em um. Para usar esse sinalizador, o controlador deve ter definido o modo de arquivo de log EVENT_TRACE_USE_GLOBAL_SEQUENCE ou EVENT_TRACE_USE_LOCAL_SEQUENCE ao criar a sessão.

  • TRACE_MESSAGE_SYSTEMINFO

    Inclua o identificador de thread e o identificador de processo na mensagem.

  • TRACE_MESSAGE_TIMESTAMP

    Inclua um carimbo de data/hora na mensagem.

TRACE_MESSAGE_COMPONENTID e TRACE_MESSAGE_GUID são mutuamente exclusivos.

As informações são incluídas nos dados do evento na seguinte ordem:

  • Número de sequência
  • GUID da classe de rastreamento de evento (ou identificador de componente)
  • Carimbo de data/hora
  • Identificador de thread
  • Identificador de processo

[in] MessageGuid

GUID de classe ou ID de componente que identifica a mensagem. Depende se MessageFlags contiver o sinalizador TRACE_MESSAGE_COMPONENTID ou TRACE_MESSAGE_GUID .

[in] MessageNumber

Número que identifica exclusivamente cada ocorrência da mensagem. Você deve definir o valor especificado para esse parâmetro; o valor deve ser significativo para o aplicativo.

...

Uma lista de argumentos variáveis a serem acrescentados à mensagem. Use esta lista para especificar os dados de evento específicos do provedor. A lista deve ser composta por pares de argumentos da seguinte maneira.

  • PVOID: ponteiro para os dados do argumento.
  • size_t: o tamanho dos dados do argumento, em bytes.

Encerre a lista usando um par de argumentos que consiste em um ponteiro para NULL e zero.

O chamador deve garantir que a soma dos tamanhos dos argumentos + 72 não exceda o tamanho do buffer da sessão de rastreamento de eventos.

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_HANDLE

    O LoggerHandle é NULL ou especifica o identificador de sessão do Agente do Kernel NT.

  • ERROR_NOT_ENOUGH_MEMORY

    A sessão ficou sem buffers livres para gravação. Isso pode ocorrer durante as altas taxas de eventos porque o subsistema do disco está sobrecarregado ou o número de buffers é muito pequeno. Em vez de bloquear até que mais buffers fiquem disponíveis, TraceMessage descarta o evento.

    Windows 2000 e Windows XP: Sem suporte.

  • ERROR_OUTOFMEMORY

    O evento é descartado porque, embora o pool de buffers não tenha atingido seu tamanho máximo, não há memória disponível suficiente para alocar um buffer adicional e não há nenhum buffer disponível para receber o evento.

  • ERROR_INVALID_PARAMETER

    MessageFlags contém um valor que não é válido.

  • ERROR_MORE_DATA

    Os dados de um único evento não podem abranger vários buffers. Um evento de rastreamento é limitado ao tamanho do buffer da sessão de rastreamento de eventos menos o tamanho da estrutura EVENT_TRACE_HEADER .

Comentários

Os provedores WPP baseados em TMF chamam essa função.

Observação

A maioria dos desenvolvedores não chamará essa função diretamente. Os provedores WPP usam funções wrapper geradas por tracewpp.exe em vez de chamar APIs ETW.

Se você precisar acessar a funcionalidade de rastreamento de mensagens de uma função wrapper, chame a versão TraceMessageVa dessa função.

Os consumidores terão que usar o retorno de chamada EventCallback para receber e processar os eventos se o parâmetro MessageFlags não contiver o sinalizador TRACE_MESSAGE_GUID. Se você não especificar o sinalizador TRACE_MESSAGE_GUID, o consumidor não poderá usar EventClassCallback porque o membro Header.Guid da estrutura EVENT_TRACE não conterá o GUID da classe de rastreamento de eventos.

Observe que os membros das estruturas EVENT_TRACE e EVENT_TRACE_HEADER que correspondem aos sinalizadores MessageFlags serão definidos somente se o sinalizador correspondente for especificado. Por exemplo, os membros ThreadId e ProcessId de EVENT_TRACE_HEADER serão preenchidos somente se você especificar o sinalizador TRACE_MESSAGE_SYSTEMINFO.

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho evntrace.h
Biblioteca Advapi32.lib
DLL Advapi32.dll

Confira também

Traceevent

TraceEventInstance

TraceMessageVa