Ereignisbezeichner (Ereignisprotokollierung)

Ereignisbezeichner identifizieren ein bestimmtes Ereignis eindeutig. Jede Ereignisquelle kann eigene nummerierte Ereignisse und die Beschreibungszeichenfolgen definieren, denen sie in der Nachrichtendatei zugeordnet sind. Ereignisanzeigen können diese Zeichenfolgen dem Benutzer präsentieren. Sie sollten dem Benutzer helfen, zu verstehen, was falsch war, und schlägt vor, welche Aktionen ausgeführt werden sollen. Leiten Sie die Beschreibung an den Benutzern, die ihre eigenen Probleme lösen, nicht bei Administratoren oder Supporttechnikern. Weitere Informationen finden Sie unter "Richtlinien für Fehlermeldungen".

Format

Das folgende Diagramm veranschaulicht das Format eines Ereignisbezeichners.

  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

Schweregrad Der Schweregrad wird wie folgt definiert:

00 - Erfolg
01 - Information
10 - Warnung
11 – Fehler

C

Kundenbit. Dieses Bit wird wie folgt definiert:

0 – Systemcode
1 – Kundencode

R

Reservierte Bitzahl.

Anlage

Einrichtungscode. Dieser Wert kann FACILITY_NULL werden.

Code

Statuscode für die Einrichtung.

Nachrichtendefinitionen

Nachrichten werden in der Ereignismeldungsdatei definiert. Die Beschreibungszeichenfolgen in der Ereignismeldungsdatei werden nach Ereignisbezeichner indiziert, sodass Ereignisanzeige ereignisspezifischen Text für jedes Ereignis basierend auf dem Ereignisbezeichner anzeigen kann. Alle Beschreibungen sind lokalisiert und spracheabhängig. Weitere Informationen zum Erstellen einer Nachrichtendatei finden Sie unter "Nachrichtentextdateien".

Die Beschreibungszeichenfolgen können Einfügezeichenfolgenplatzhalter des Formulars %n enthalten, wobei %1 die erste Einfügezeichenfolge angibt usw. So ist z. B. ein Beispieleintrag in der MC-Datei:

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

In diesem Fall enthält der von ReadEventLog zurückgegebene Puffer Einfügezeichenfolgen. Das NumStrings-Element der EVENTLOGRECORD-Struktur gibt die Anzahl der Einfügezeichenfolgen an. Das StringOffset-Element der EVENTLOGRECORD-Struktur gibt die Position der ersten Einfügezeichenfolge im Puffer an. Sie können ein Array von DWORD_PTRs übergeben, das auf die adresse jeder Zeichenfolge im Puffer verweist, wenn Sie die FormatMessage-Funktion aufrufen und die Zeichenfolgen in die Nachricht einfügen.

Die Beschreibungszeichenfolge kann auch Platzhalter für Parameterzeichenfolgen aus der Parametermeldungsdatei enthalten. Die Platzhalter sind das Formular %%n, wobei %%1 durch die Parameterzeichenfolge durch den Bezeichner 1 ersetzt wird usw. Es liegt jedoch an Ihnen, die Parameterzeichenfolgen in die Nachrichtenzeichenfolge einzufügen, die FormatMessage zurückgibt. In der Regel rufen Sie "FormatMessage " auf, um die Nachrichtenzeichenfolge für das Ereignis abzurufen. Anschließend analysieren Sie die Nachrichtenzeichenfolge für %%n-Parameter . Wenn die Nachricht einen oder mehrere Parameter enthält, laden Sie den ParameterMessageFile-Registrierungswert für die Quelle. Rufen Sie für jeden Parameter in der Nachrichtenzeichenfolge den Bezeichner ab, und übergeben Sie ihn an FormatMessage , um die Parameterzeichenfolge abzurufen. Ersetzen Sie den Parameter in der Nachrichtenzeichenfolge durch die Parameterzeichenfolge, die FormatMessage zurückgegeben hat.

Einfügezeichenfolgen

Einfügezeichenfolgen sind optionale sprachunabhängige Zeichenfolgen, die zum Ausfüllen von Werten für Platzhalter in Beschreibungszeichenfolgen verwendet werden. Da die Zeichenfolgen nicht lokalisiert sind, ist es wichtig, dass diese Platzhalter nur verwendet werden, um sprachunabhängige Zeichenfolgen wie numerische Werte, Dateinamen, Benutzernamen usw. darzustellen. Die Zeichenfolgenlänge darf 32 Kilobyte - 1 Zeichen nicht überschreiten.

Vermeiden Sie die Verwendung mehrerer Zeichenfolgen, um eine größere Beschreibung zu erstellen. Eine Einfügezeichenfolge sollte als Daten behandelt werden, nicht als Text. Im folgenden Beispiel sollte pszString1 und pszString2 beispielsweise nicht als Einfügezeichenfolgen für pszDescription verwendet werden.

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

Im folgenden Beispiel empfiehlt es sich, entweder pszString1 oder pszString2 für die Einfügezeichenfolge in pszDescription zu verwenden.

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