Olvasás angol nyelven

Megosztás a következőn keresztül:


Naplózás az NT-eseménynaplóba esemény alapján

Az NTEventLogEventConsumer osztály egy adott esemény bekövetkezésekor üzenetet ír a Windows eseménynaplójába. Ez az osztály a WMI által biztosított szokásos eseményfelhasználó.

Megjegyzés

A hitelesített felhasználók alapértelmezés szerint nem naplózhatják az eseményeket az alkalmazásnaplóba egy távoli számítógépen. Ennek eredményeképpen a jelen témakörben ismertetett példa sikertelen lesz, ha a NTEventLogEventConsumer osztály UNCServerName tulajdonságát használja, és egy távoli számítógépet ad meg értékként. Az eseménynaplók biztonságának módosításáról ebben a tudásbáziscikkbenolvashat.

 

A standard fogyasztó használatának alapvető eljárását A standard fogyasztókkalesemények monitorozása és megválaszolása című cikk ismerteti. Az alábbi lépések az NTEventLogEventConsumer osztály használatakor szükséges alapműveleten túli lépések. A lépések azt ismertetik, hogyan hozhat létre olyan eseményfelhasználót, amely az alkalmazás eseménynaplójába ír.

Az alábbi eljárás azt ismerteti, hogyan hozhat létre olyan eseményfelhasználót, amely az NT-eseménynaplóba ír.

Olyan eseményfelhasználó létrehozása, amely a Windows-eseménynaplóba ír

  1. Felügyelt objektumformátumú (MOF) fájlban hozzon létre egy példányt NTEventLogEventConsumer a lekérdezésben kért események fogadásához. Az MOF-kód írásáról további információt Felügyelt objektumformátumú (MOF) osztályokcímű témakörben talál.

  2. Hozzon létre és nevezze el a __EventFilteregy példányát, majd hozzon létre egy lekérdezést az NT-eseménynaplóba írást kiváltó esemény típusának megadásához.

    További információért lásd: Lekérdezés WQL-el.

  3. Hozzon létre egy __FilterToConsumerBinding példányt, hogy a szűrőt társítsa az NTEventLogEventConsumerpéldánnyal.

  4. Az MOF-fájl fordítása Mofcomp.exehasználatával.

Példa

Az ebben a szakaszban szereplő példa MOF-kódban található, de a példányokat programozott módon is létrehozhatja a WMI- Scripting API vagy a WMI COM API használatával. A példa bemutatja, hogyan hozhat létre egy fogyasztót az alkalmazás eseménynaplójába való íráshoz az NTEventLogEventConsumerhasználatával. Az MOF létrehoz egy "NTLogCons_Example" nevű új osztályt, egy eseményszűrőt, amely lekérdezi az új osztály egy példányán a műveleteket, például a létrehozást, valamint egy kötést a szűrő és a fogyasztó között. Mivel az MOF utolsó művelete egy NTLogCons_Example-példány létrehozása, az esemény azonnal megjelenik az Alkalmazás eseménynaplójában a Eventvwr.exefuttatásával.

A EventID=0x0A for SourceName="WinMgmt" az alábbi szöveggel azonosít egy üzenetet. A "%1", "%2", "%3" az InsertionStringTemplates tömbben megadott megfelelő sztringek helyőrzői.

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.

Az alábbi eljárás a példa használatát ismerteti.

A példa használatához

  1. Másolja az alábbi MOF-listát egy szövegfájlba, és mentse .mof kiterjesztéssel.

  2. A Parancsablakban fordítsa le az MOF-fájlt a következő paranccsal:

    Mofcompfájlnév**.mof**

  3. Futtassa Eventvwr.exe. Tekintse meg az alkalmazás eseménynaplóját. Meg kell jelennie egy 10-es azonosítójú eseménynek (EventID), Forrás = "WMI" és Típus = Hiba.

  4. Kattintson duplán a Információtípus üzenetre a WMI-ből, a 10-essel az Esemény oszlopban. Az eseményhez a következő leírás jelenik meg.

    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";
};

Események figyelése és kezelése standard fogyasztókkal