Compartir a través de


Escribir en el registro de eventos del sistema

Los errores se especifican mediante su valor NTSTATUS. Los valores NTSTATUS específicos del sistema que pueden usar los controladores y los escritores de controladores pueden definir errores adicionales. Tenga en cuenta que solo se pueden usar determinados valores NTSTATUS al registrar errores.

Cada valor NTSTATUS que se puede usar al registrar errores tiene un mensaje de error asociado. Por ejemplo, el controlador de puerto paralelo usa el valor NTSTATUS PAR_INTERRUPT_CONFLICT para representar conflictos de interrupción de hardware, con el texto del mensaje "Conflicto de interrupción detectado para %1".

El Visor de eventos muestra el texto del mensaje en el cuadro de texto Descripción de la hoja de propiedades de la entrada de registro. Si la cadena de texto del mensaje contiene "%1", el Visor de eventos lo reemplaza por el nombre del dispositivo que registró la entrada. El texto del mensaje puede contener parámetros adicionales con el formato "%2", "%3", etc. Cuando el controlador registra el error, puede proporcionar valores de cadena para esos parámetros. Estos valores de cadena se conocen como cadenas de inserción. El Visor de eventos los insertará automáticamente en lugar de los valores de porcentaje.

El controlador también puede incluir datos binarios en la entrada de registro, conocido como datos de volcado de memoria. El Visor de eventos muestra los datos de volcado en el cuadro de texto Datos de la hoja de propiedades de la entrada de registro.

Puede abrir la hoja de propiedades de una entrada de registro haciendo doble clic en la entrada del Visor de eventos. En la siguiente captura de pantalla se muestra una hoja de propiedades de entrada de registro de ejemplo.

captura de pantalla de una hoja de propiedades de eventos.

Los controladores usan la rutina IoAllocateErrorLogEntry para asignar una entrada del registro de errores. Las entradas de registro constan de un encabezado de IO_ERROR_LOG_PACKET de longitud variable, seguido de cadenas de inserción.

En el diagrama siguiente se muestra el diseño de una entrada del registro de errores en la memoria.

diagrama que ilustra un diseño de un paquete de registro de errores en la memoria .

El miembro ErrorCode de IO_ERROR_LOG_PACKET especifica el valor NTSTATUS del error. El miembro DumpData especifica los datos de volcado de memoria de la entrada de registro. DumpData es una matriz de tamaño variable, cuyo tamaño especifica el miembro DumpDataSize . Los controladores especifican el principio de la primera cadena de inserción con el miembro StringOffset y el número de cadenas del miembro NumberOfStrings . Cada cadena de inserción es una cadena Unicode terminada en null.

Una vez que el controlador rellena la entrada del registro de errores asignada, escribe la entrada en el registro de errores mediante IoWriteErrorLogEntry. IoWriteErrorLogEntry libera automáticamente la memoria asignada para la entrada de registro. Los controladores pueden usar IoFreeErrorLogEntry para liberar las entradas de registro sin usar.

Los códigos de error predefinidos (con el formato IO_ERR_XXX) se definen en el archivo de encabezado ntiologc.h que se incluye con el Kit de controladores de Windows (WDK). El mensaje de error asociado a cada código de error se puede encontrar en los comentarios de ntiologc.h, junto a la declaración del código de error. Para usar un código de error predefinido, el controlador debe registrar el archivo del sistema, iologmsg.dll, como origen de los mensajes de error asociados. Para obtener más información, consulte Registro como origen de mensajes de error.

Los controladores también pueden definir sus propios tipos de error personalizados y los mensajes de error asociados. Para obtener más información, consulte Definición de tipos de error personalizados.