Identificadores de eventos (registro de eventos)
Los identificadores de evento identifican de forma única un evento determinado. Cada origen de eventos puede definir sus propios eventos numerados y las cadenas de descripción a las que se asignan en su archivo de mensajes. Los visores de eventos pueden presentar estas cadenas al usuario. Deben ayudar al usuario a comprender lo que salió mal y sugerir las acciones que se deben realizar. Dirija la descripción a los usuarios que resuelven sus propios problemas, no a los administradores ni a los técnicos de soporte técnico. Para obtener más información, vea Instrucciones de mensajes de error.
Formato
En el diagrama siguiente se muestra el formato de un identificador de 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
-
Gravedad. La gravedad se define de la siguiente manera:
- 00 - Correcto
- 01 - Informativo
- 10 - Advertencia
- 11 - Error
-
C
-
Bit de cliente. Este bit se define de la siguiente manera:
- 0 - Código del sistema
- 1 - Código del cliente
-
R
-
Bit reservado.
-
Instalación
-
Código de instalación. Este valor puede ser FACILITY_NULL.
-
Código
-
Código de estado de la instalación.
Definiciones de mensaje
Los mensajes se definen en el archivo de mensajes de evento. Las cadenas de descripción del archivo de mensajes de evento se indexan por identificador de evento, lo que permite Visor de eventos mostrar texto específico del evento para cualquier evento basado en el identificador de evento. Todas las descripciones dependen del idioma y localizadas. Para obtener más información sobre cómo crear un archivo de mensaje, vea Archivos de texto de mensajes.
Las cadenas de descripción pueden contener marcadores de posición de cadena de inserción, con el formato %n, donde %1 indica la primera cadena de inserción, etc. Por ejemplo, lo siguiente es una entrada de ejemplo en el archivo .mc:
MessageId=0x4
Severity=Error
Facility=System
SymbolicName=MSG_CMD_DELETE
Language=English
File %1 contains %2, which is in error.
.
En este caso, el búfer devuelto por ReadEventLog contiene cadenas de inserción. El miembro NumStrings de la estructura EVENTLOGRECORD indica el número de cadenas de inserción. El miembro StringOffset de la estructura EVENTLOGRECORD indica la ubicación de la primera cadena de inserción en el búfer. Puede pasar una matriz de DWORD_PTRs que apunten a la dirección de cada cadena del búfer al llamar a la función FormatMessage y insertará las cadenas en el mensaje.
La cadena de descripción también puede contener marcadores de posición para las cadenas de parámetros del archivo de mensaje de parámetros. Los marcadores de posición tienen el formato %%n, donde %%1 se reemplaza por la cadena de parámetro por el identificador de 1, etc. Sin embargo, es necesario insertar las cadenas de parámetros en la cadena de mensaje que FormatMessage devuelve. Normalmente, se llama a FormatMessage para obtener la cadena de mensaje del evento. A continuación, analizará la cadena de mensaje para los parámetros %%n . Si el mensaje contiene uno o varios parámetros, cargue el valor del Registro ParameterMessageFile para el origen. Para cada parámetro de la cadena de mensaje, obtenga el identificador y páselo a FormatMessage para obtener la cadena de parámetro. Reemplace el parámetro de la cadena de mensaje por la cadena de parámetro que FormatMessage devolvió.
Cadenas de inserción
Las cadenas de inserción son cadenas opcionales independientes del lenguaje que se usan para rellenar los valores de los marcadores de posición en las cadenas de descripción. Dado que las cadenas no están localizadas, es fundamental que estos marcadores de posición solo se usen para representar cadenas independientes del idioma, como valores numéricos, nombres de archivo, nombres de usuario, etc. La longitud de la cadena no debe superar los 32 kilobytes - 1 caracteres.
Evite usar varias cadenas para crear una descripción mayor. Una cadena de inserción debe tratarse como datos, no como texto. Por ejemplo, en el ejemplo siguiente, pszString1 y pszString2 no deben usarse como cadenas de inserción para pszDescription.
LPSTR pszString1 = "successfully";
LPSTR pszString2 = "not";
LPSTR pszDescription = "The user was %1 added to the database.";
En el ejemplo siguiente, es adecuado usar pszString1 o pszString2 para la cadena de inserción en pszDescription.
LPSTR pszString1 = "c:\\testapp1.c";
LPSTR pszString2 = "c:\\testapp2.c";
LPSTR pszDescription = "Access denied. Attempted to open the file %1."