Compartir a través de


Registro en el registro de sucesos NT basado en un suceso

La NTEventLogEventConsumer clase escribe un mensaje en el registro de eventos de Windows cuando se produce un evento especificado. Esta clase es un consumidor de eventos estándar que proporciona WMI.

Nota:

Los usuarios autenticados no pueden, por defecto, registrar eventos en el registro de aplicaciones de un ordenador remoto. Como resultado, el ejemplo descrito en este tema fallará si se utiliza la opción UNCServerName propiedad de NTEventLogEventConsumer clase y especificar un ordenador remoto como valor. Para saber cómo cambiar la seguridad del registro de eventos, consulte este artículo KB.

 

El procedimiento básico para utilizar un consumidor estándar se describe en Supervisión y respuesta a eventos con consumidores estándar. A continuación se indican los pasos adicionales, más allá del procedimiento básico, necesarios cuando se utiliza el NTEventLogEventConsumer clase. Los pasos describen cómo crear un consumidor de eventos que escriba en el registro de eventos de la aplicación.

El siguiente procedimiento describe cómo crear un consumidor de eventos que escriba en el Registro de Eventos NT.

Para crear un consumidor de eventos que escriba en el registro de eventos de Windows

  1. En un archivo MOF (Managed Object Format), cree una instancia de NTEventLogEventConsumer para recibir los eventos que solicite en la consulta. Para más información sobre la escritura de código MOF, véase Diseño de clases de formato de objeto gestionado (MOF).

  2. Crear, y nombrar, una instancia de __EventFilter, y, a continuación, crear una consulta para especificar el tipo de evento que desencadena la escritura en el NT Event Log.

    Para más información, véase, Consulta con WQL.

  3. Crear una instancia de __FilterToConsumerBinding para asociar el filtro con la instancia de NTEventLogEventConsumer.

  4. Compile el archivo MOF utilizando Mofcomp.exe.

Ejemplo

El ejemplo de esta sección está en código MOF, pero puede crear las instancias mediante programación utilizando la función Scripting API para WMI o el COM API para WMI. El ejemplo muestra cómo crear un consumidor para escribir en el registro de eventos de la aplicación utilizando NTEventLogEventConsumer. El MOF crea una nueva clase llamada «NTLogCons_Example», un filtro de eventos para consultar operaciones, como la creación, en una instancia de esta nueva clase, y un enlace entre el filtro y el consumidor. Como la última acción en el MOF es crear una instancia de NTLogCons_Example, puede ver inmediatamente el evento en el registro de eventos de la aplicación ejecutando Eventvwr.exe.

El EventID=0x0A for SourceName="WinMgmt" identifica un mensaje con el siguiente texto. %1», “%2”, “%3” son marcadores de posición para las cadenas correspondientes especificadas en la matriz InsertionStringTemplates.

Event filter with query "%2" could not be [re]activated in 
namespace "%1" because of error %3. Events may not be delivered 
through this filter until the problem is corrected.

El siguiente procedimiento describe cómo usar el ejemplo.

Para usar el ejemplo

  1. Copie el listado MOF que aparece a continuación en un archivo de texto y guárdelo con extensión .mof.

  2. En una ventana de comandos, compile el archivo MOF utilizando el siguiente comando:

    Mofcomp nombre de archivo**.mof**

  3. Ejecute Eventvwr.exe. Mire el registro de eventos de la aplicación. Debería ver un evento con ID = 10 (el EventID), Fuente = "WMI", y escriba = Error.

  4. Doble clic la Tipo de información mensaje desde WMI con 10 en el Evento columna. A continuación se mostrará la siguiente descripción para el evento.

    Event filter with query "STRING2" could not be [re]activated in 
    namespace "STRING1" because of error STRING3. Events cannot be 
    delivered through this filter until the problem is corrected.
    
// Set the namespace as root\subscription.
// The NTEventLogEventConsumer is already
// compiled in the root\subscription namespace. 

#pragma namespace ("\\\\.\\Root\\subscription")
class NTLogCons_Example
{
 [key] string name;
 string InsertionString;
};

// Create an instance of the NT Event log consumer
// and give it the alias $CONSUMER

instance of NTEventLogEventConsumer as $CONSUMER
{
    // Unique instance name
    Name = "NTConsumerTest"; 
    // System component that generates the event
    SourceName = "WinMgmt";
    // Event message WBEM_MC_CANNOT_ACTIVATE_FILTER
    EventID = 0xC000000A;
    // EVENTLOG_ERROR_TYPE
    EventType = 1;
    // WMI event messages do not have multiple categories
    Category = 0;
    // Number of strings in InsertionStringTemplates property
    NumberOfInsertionStrings = 3;

    InsertionStringTemplates =
       {"%TargetInstance.Name%",
        "%TargetInstance.InsertionString%",
        "STRING3"};
};

// Create an instance of the event filter
// and give it the alias $FILTER
// The filter queries for any instance operation event
// for instances of the NTLogCons_Example class

instance of __EventFilter as $FILTER
{
    // Unique instance name
    Name = "NTLogConsFilter";
    Query = "SELECT * from __InstanceOperationEvent"
            " WHERE TargetInstance ISA \"NTLogCons_Example\"";
    QueryLanguage = "WQL";
};

// Create an instance of the binding
// between filter and consumer instances.

instance of __FilterToConsumerBinding
{
    Consumer = $CONSUMER;
    Filter = $FILTER;
};

// Create an instance of this class right now. 

instance of NTLogCons_Example
{
   Name = "STRING1";
   InsertionString = "STRING2";
};

Supervisión y respuesta a eventos con consumidores estándar