Domanda

Ho un codice che legge il registro eventi di Windows. Utilizza OpenEventLog, ReadEventLog e ottiene l'origine e l'ID evento. Quindi cerca la fonte sotto

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

, carica le DLL appropriate in base a quanto elencato in EventMessageFile e infine utilizza FormatMessage per unire le stringhe di eventi con il contenuto del messaggio DLL per ottenere il testo del messaggio dell'evento finale. Questo è il modo consigliato e, sebbene un po 'doloroso, funziona benissimo.

Fino a ... Vado a cercare la fonte e trovo che non abbia una EventMessageFile , ma piuttosto una voce ProvideGuid . Questo sembra essere il nuovo modo (appaiono su Vista e Windows 2008). Uggh - niente da passare a FormatMessage per cercare il testo del messaggio e unire le stringhe di dati

: (

La ricerca di guid nel registro porta a riferimenti ad altri file (http.sys nel caso dell'origine HTTP), ma non riesco mai a ottenere il testo completo del messaggio. Devo usare quelle API EvtOpenSession ? Spero di no poiché ho già il EVENTLOGRECORD * da una chiamata a ReadEventLog e il fatto che il software deve essere eseguito su Windows 2003 dove EvtOpenSession non è supportato (disponibile solo su Vista e Windows 2008). NOTA: alcune fonti su Vista hanno ProviderGUID e altre hanno EventMessageFile, quindi il vecchio metodo è ancora praticabile.

Quindi quello che sto cercando è un modo per esaminare ProviderGuid e ottenere la DLL che deve essere passata a FormatMessage per visualizzare il testo completo del messaggio del registro eventi.

Grazie per qualsiasi input

È stato utile?

Soluzione

Le API a cui Richard si collega sono per il nuovo sistema Eventing di stile (nome in codice Crimson, a volte chiamato Manifest Based Provider) introdotto in Vista / Server 2K8. Uno dei manufatti di questo nuovo sistema sono le nuove API per utilizzare questi log, un altro è la chiave ProviderGuid per alcune EventSource che producono eventi usando questo nuovo framework.

Penso che dovresti usare le funzioni su Windows Vista in seguito per consumare questi registri, dovrebbe gestire il lavoro per te. È possibile utilizzare il metodo EvtFormatMessage per formattare le stringhe. Credo che queste API leggeranno anche gli eventi prodotti da "Classic" fornitori.

Se stai consumando questi messaggi da un'app .NET puoi usare i tipi nello spazio dei nomi System.Diagnostics.Eventing.Reader, introdotto in .NET 3.5.

Altri suggerimenti

Esistono API Win32 per leggere / espandere le voci del registro eventi.

Vedi MSDN: http://msdn.microsoft .com / it-it / library / aa385780 (VS.85) aspx

Qualcos'altro e probabilmente troverai problemi con le patch, per non parlare dei service pack o delle nuove versioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top