Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Grava um evento ETW que contém uma cadeia de caracteres como seus dados. Essa função não deve ser usada.
Sintaxe
ULONG EVNTAPI EventWriteString(
[in] REGHANDLE RegHandle,
[in] UCHAR Level,
[in] ULONGLONG Keyword,
[in] PCWSTR String
);
Parâmetros
[in] RegHandle
Identificador de registro do provedor. O identificador vem de EventRegister. O evento gerado usará a ProviderId associada ao identificador.
[in] Level
Um número de 8 bits usado para descrever a gravidade ou a importância de um evento.
Importante
ProviderId, Level e Keyword são os principais meios para filtrar eventos. Outros tipos de filtragem são possíveis, mas têm uma sobrecarga muito maior. Sempre atribua um nível diferente de zero e palavra-chave a cada evento.
Consulte EVENT_DESCRIPTOR para obter detalhes sobre o nível de evento.
[in] Keyword
Uma máscara de bits de 64 bits usada para indicar a associação de um evento em um conjunto de categorias de eventos.
Importante
ProviderId, Level e Keyword são os principais meios para filtrar eventos. Outros tipos de filtragem são possíveis, mas têm uma sobrecarga muito maior. Sempre atribua um nível diferente de zero e palavra-chave a cada evento.
Consulte EVENT_DESCRIPTOR para obter detalhes sobre a palavra-chave do evento.
[in] String
Cadeia de caracteres terminada em NUL para gravar como os dados do evento.
Valor retornado
Retorna ERROR_SUCCESS se tiver êxito ou um código de erro. Os códigos de erro possíveis incluem o seguinte:
- ERROR_INVALID_PARAMETER: um ou mais dos parâmetros não são válidos.
- ERROR_INVALID_HANDLE: o identificador de registro do provedor não é válido.
- ERROR_ARITHMETIC_OVERFLOW: o tamanho do evento é maior que o máximo permitido (64 KB – cabeçalho).
- ERROR_MORE_DATA: o tamanho do buffer de sessão é muito pequeno para o evento.
- ERROR_NOT_ENOUGH_MEMORY: ocorre quando os buffers preenchidos estão tentando liberar para o disco, mas os IOs de disco não estão acontecendo rápido o suficiente. Isso acontece quando o disco está lento e o tráfego de eventos é pesado. Eventualmente, não há mais buffers gratuitos (vazios) e o evento é descartado.
- STATUS_LOG_FILE_FULL: o arquivo de reprodução em tempo real está cheio. Os eventos não são registrados na sessão até que um consumidor em tempo real consuma os eventos do arquivo de reprodução.
O código de erro 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 e continuar a relatar eventos mesmo que um evento ETW não possa ser gravado, portanto, os builds de versão geralmente devem ignorar o código de erro.
Comentários
Essa API não é útil e não deve ser usada.
- A maioria das ferramentas de análise do ETW não dá suporte corretamente a eventos somente cadeia de caracteres sem um manifesto.
- Sem um manifesto, informações importantes sobre o evento (por exemplo, o nome do provedor, a ID do evento e o nome do evento) não estão disponíveis para que os eventos resultantes sejam difíceis de usar mesmo quando a ferramenta de análise dá suporte a eventos somente cadeia de caracteres.
- Com um manifesto, essa função se comporta quase exatamente como o código de um evento baseado em manifesto com um único campo de cadeia de caracteres. No entanto, o evento baseado em manifesto é mais compatível com as ferramentas de análise de rastreamento. Além disso, o código gerado por MC.exe para um evento com um único campo de cadeia de caracteres é mais eficiente do que a função EventWriteString .
Em vez de usar essa API, considere as seguintes alternativas:
- Use TraceLoggingProvider.h para gravar eventos que são bem compatíveis com as ferramentas de análise do ETW, funcionam sem um manifesto e incluem metadados como nome do provedor e nome do evento.
- Escreva um manifesto de instrumentação. Crie um evento simples com um único valor de cadeia de caracteres terminada em NUL. Você pode escrever e coletar eventos mesmo sem um manifesto. Você só precisará do manifesto para decodificar o rastreamento coletado.
EventWriteString grava um evento com uma carga de dados que consiste na cadeia de caracteres especificada. Essa API é quase equivalente ao seguinte código:
EVENT_DESCRIPTOR eventDescriptor;
EVENT_DATA_DESCRIPTOR dataDescriptor;
EventDescCreate(&eventDescriptor, 0, 0, 0, Level, 0, 0, Keyword);
EventDataDescCreate(&dataDescriptor, String, (wcslen(String) + 1) * sizeof(WCHAR));
return EventWrite(RegHandle, &eventDescriptor, 1, &dataDescriptor);
O evento resultante é o mesmo que qualquer outro evento gerado pelo EventWrite , exceto que o evento resultante tem o sinalizador EVENT_HEADER_FLAG_STRING_ONLY definido (consulte EVENT_HEADER para obter informações sobre sinalizadores de evento).
Observe que o evento é gravado com ID, Versão, Opcode, Tarefa e Canal definidos como 0.
Observe que o evento usa a ID de atividade do thread atual.
As ferramentas de análise do ETW que estão cientes do sinalizador EVENT_HEADER_FLAG_STRING_ONLY podem extrair o valor da cadeia de caracteres mesmo quando o decodificador não consegue localizar nenhuma outra informação de decodificação para o provedor de eventos. No entanto, sem um manifesto, as ferramentas não poderão determinar o nome do provedor do evento.
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 |