Pergunta

Eu tenho o código que lê o log de eventos do Windows. Ele usa OpenEventLog, ReadEventLog e recebe a origem do evento e evento ID. Em seguida, ele olha para cima a fonte sob o

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

chave, carrega a DLL apropriado (s) de acordo com o que está listado no EventMessageFile e, finalmente, usa FormatMessage para mesclar as cadeias de eventos com o conteúdo da mensagem DLL para obter o texto final mensagem de evento. Esta é a maneira recomendada, e apesar de um pouco de dor, ele funciona muito bem.

Até que ... Eu vou pesquisa a fonte e achar que não tem um EventMessageFile, mas sim uma entrada ProvideGuid. Esta parece ser a nova forma (eles aparecem no Vista e Windows 2008). Uggh - nada para passar para FormatMessage para procurar o texto da mensagem e mesclando nas cadeias de dados

: (

Como pesquisar o registro para o guid leva a referências a outros arquivos (http.sys no caso da fonte HTTP), mas eu nunca pode obter o texto da mensagem completa. Eu tenho que usar essas APIs EvtOpenSession? Eu estou esperando que não pois já tenho o EVENTLOGRECORD* a partir de uma chamada para ReadEventLog, eo fato de que as necessidades de software para rodar em Windows 2003, onde EvtOpenSession não é suportado (disponível apenas no Vista e Windows 2008). NOTA:. Algumas fontes no Vista tem ProviderGUID, e outros têm EventMessageFile, então o método antigo ainda é viável

Então o que eu estou depois é uma maneira de olhar para o ProviderGuid e obter a DLL que precisa ser passada para FormatMessage para exibir o texto completo mensagem log de eventos.

Obrigado por qualquer entrada

Foi útil?

Solução

As APIs que Richard links para são para o novo sistema de estilo Eventing (carmesim codinome, às vezes chamado de Provedores de Manifest based) introduzido no Vista Server 2K8 /. Um dos artefatos deste novo sistema é novas APIs para consumir esses logs, outra é a chave ProviderGuid para certos EventSources que produzem eventos usando este novo quadro.

Eu acho que você deve usar as funções no Windows Vista depois de consumir esses logs, ele deve lidar com o trabalho para você. Você pode usar o método EvtFormatMessage para formatar as cordas. Acredito que essas APIs também irá ler os acontecimentos produzidos por fornecedores "Classic".

Se você está consumindo estas mensagens a partir de um aplicativo .NET você pode usar tipos no namespace System.Diagnostics.Eventing.Reader, introduzida no .NET 3.5.

Outras dicas

Existem Win32 APIs para leitura / expansão entradas do log de eventos.

Veja MSDN: http://msdn.microsoft .com / en-us / library / aa385780 (VS.85) .aspx

Qualquer outra coisa, e você é provável encontrar problemas com manchas, deixe-service packs sozinho ou novas versões.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top