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 a resolver sus propios problemas, no a los administradores ni a los técnicos de soporte técnico. Para obtener más información, consulte directrices 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
-
Severidad. 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 de cliente
-
R
-
Bit reservado.
-
Facility
-
Código de instalación. Este valor puede ser FACILITY_NULL.
-
código de
-
Código de estado de la instalación.
Definiciones de mensajes
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 al 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 localizados. 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, del formulario %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 del EVENTLOGRECORD estructura indica el número de cadenas de inserción. El miembro StringOffset del EVENTLOGRECORD estructura indica la ubicación de la primera cadena de inserción en el búfer. Puede pasar una matriz de DWORD_PTRs que apunte a la dirección 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ámetro 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, 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 ParameterMessageFile valor del Registro 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ámetros que FormatMessage devuelto.
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 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 se deben usar 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."