Identificatori di evento (registrazione eventi)

Gli identificatori di evento identificano in modo univoco un determinato evento. Ogni origine evento può definire i propri eventi numerati e le stringhe di descrizione a cui viene eseguito il mapping nel relativo file di messaggio. I visualizzatori di eventi possono presentare queste stringhe all'utente. Dovrebbero aiutare l'utente a capire cosa è andato storto e suggerire quali azioni intraprendere. Indirizzare la descrizione agli utenti che risolvono i propri problemi, non agli amministratori o ai tecnici di supporto. Per altre informazioni, vedere Linee guida per i messaggi di errore.

Formato

Il diagramma seguente illustra il formato di un identificatore di evento.

  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 +---+-+-+-----------------------+-------------------------------+
 |Sev|C|R|     Facility          |               Code            |
 +---+-+-+-----------------------+-------------------------------+

Sev

Gravità. La gravità è definita come segue:

00 - Esito positivo
01 - Informazioni
10 - Avviso
11 - Errore

C

Bit del cliente. Questo bit è definito come segue:

0 - Codice di sistema
1 - Codice cliente

R

Bit riservati.

Struttura

Codice della struttura. Questo valore può essere FACILITY_NULL.

Codice

Codice di stato per la struttura.

Definizioni dei messaggi

I messaggi vengono definiti nel file dei messaggi dell'evento. Le stringhe di descrizione nel file del messaggio di evento vengono indicizzate in base all'identificatore dell'evento, consentendo Visualizzatore eventi di visualizzare testo specifico dell'evento per qualsiasi evento in base all'identificatore dell'evento. Tutte le descrizioni sono localizzate e dipendenti dalla lingua. Per altre informazioni sulla compilazione di un file di messaggio, vedere File di testo del messaggio.

Le stringhe di descrizione possono contenere segnaposto stringa di inserimento, del formato %n, dove %1 indica la prima stringa di inserimento e così via. Ad esempio, di seguito è riportata una voce di esempio nel file con estensione mc:

MessageId=0x4
Severity=Error
Facility=System
SymbolicName=MSG_CMD_DELETE
Language=English
File %1 contains %2, which is in error.
.

In questo caso, il buffer restituito da ReadEventLog contiene stringhe di inserimento. Il membro NumStrings della struttura EVENTLOGRECORD indica il numero di stringhe di inserimento. Il membro StringOffset della struttura EVENTLOGRECORD indica la posizione della prima stringa di inserimento nel buffer. È possibile passare una matrice di DWORD_PTRs che punta all'indirizzo di ogni stringa nel buffer quando si chiama la funzione FormatMessage e le stringhe verranno inserite nel messaggio.

La stringa di descrizione può anche contenere segnaposto per le stringhe dei parametri dal file di messaggio dei parametri. I segnaposto sono nel formato %%n, dove %%1 viene sostituito dalla stringa del parametro con l'identificatore 1 e così via. Tuttavia, spetta all'utente inserire le stringhe dei parametri nella stringa del messaggio restituita da FormatMessage . In genere, si chiama FormatMessage per ottenere la stringa di messaggio per l'evento. Si analizza quindi la stringa del messaggio per i parametri %%n . Se il messaggio contiene uno o più parametri, caricare il valore del Registro di sistema ParameterMessageFile per l'origine. Per ogni parametro nella stringa del messaggio, ottenere l'identificatore e passarlo a FormatMessage per ottenere la stringa del parametro. Sostituire il parametro nella stringa del messaggio con la stringa di parametro restituita da FormatMessage .

Stringhe di inserimento

Le stringhe di inserimento sono stringhe facoltative indipendenti dalla lingua usate per inserire i valori per i segnaposto nelle stringhe di descrizione. Poiché le stringhe non sono localizzate, è fondamentale che questi segnaposto vengano usati solo per rappresentare stringhe indipendenti dalla lingua, ad esempio valori numerici, nomi di file, nomi utente e così via. La lunghezza della stringa non deve superare i 32 kilobyte - 1 caratteri.

Evitare di usare più stringhe per creare una descrizione più ampia. Una stringa di inserimento deve essere considerata come dati, non testo. Nell'esempio seguente, ad esempio, pszString1 e pszString2 non devono essere usati come stringhe di inserimento per pszDescription.

LPSTR pszString1 = "successfully"; 
LPSTR pszString2 = "not"; 
LPSTR pszDescription = "The user was %1 added to the database.";

Nell'esempio seguente è opportuno usare pszString1 o pszString2 per la stringa di inserimento in pszDescription.

LPSTR pszString1 = "c:\\testapp1.c"; 
LPSTR pszString2 = "c:\\testapp2.c"; 
LPSTR pszDescription = "Access denied. Attempted to open the file %1."