Zaznamenávání do protokolu událostí NT podle události
NTEventLogEventConsumer třída zapíše zprávu do protokolu událostí systému Windows při výskytu zadané události. Tato třída je standardním příjemcem událostí, které poskytuje WMI.
Poznámka
Ověření uživatelé nemohou ve výchozím nastavení protokolovat události do protokolu aplikace ve vzdáleném počítači. V důsledku toho příklad popsaný v tomto tématu selže, pokud použijete UNCServerName vlastnost NTEventLogEventConsumer třídy a jako hodnotu zadejte vzdálený počítač. Informace o tom, jak změnit zabezpečení protokolu událostí, najdete v tomto článku znalostní báze.
Základní postup použití standardního příjemce je popsán v tématu Monitorování a reakce na události se standardními příjemci. Následují další kroky nad rámec základního postupu, který je nutný při použití třídy NTEventLogEventConsumer. Tento postup popisuje, jak vytvořit příjemce událostí, který zapisuje do protokolu událostí aplikace.
Následující postup popisuje, jak vytvořit příjemce událostí, který zapisuje do protokolu událostí NT.
Vytvoření příjemce událostí, který zapisuje do protokolu událostí systému Windows
V souboru MOF (Managed Object Format) vytvořte instanci NTEventLogEventConsumer pro příjem událostí, které v dotazu požadujete. Další informace o psaní kódu MOF naleznete v tématu Návrh tříd MOF (Managed Object Format).
Vytvořte a pojmenujte instanci __EventFiltera pak vytvořte dotaz, který určuje typ události, která aktivuje zápis do protokolu událostí NT.
Další informace najdete v tématu Dotazování pomocí jazyka WQL.
Vytvořte instanci __FilterToConsumerBinding pro přidružení filtru k instanci NTEventLogEventConsumer.
Zkompilujte soubor MOF pomocí Mofcomp.exe.
Příklad
Příklad v této části je v kódu MOF, ale instance můžete vytvořit programově pomocí rozhraní API pro skriptování pro rozhraní WMI nebo rozhraní COM API pro rozhraní WMI. Příklad ukazuje, jak vytvořit příjemce pro zápis do protokolu událostí aplikace pomocí NTEventLogEventConsumer. MOF vytvoří novou třídu s názvem "NTLogCons_Example", filtr událostí pro dotazování na operace, jako je vytvoření, prováděné na instanci této nové třídy, a propojení mezi filtrem a odběratelem. Vzhledem k tomu, že poslední akcí v MOF je vytvoření instance NTLogCons_Example, můžete událost okamžitě zobrazit v protokolu událostí aplikace spuštěním Eventvwr.exe.
EventID=0x0A for SourceName="WinMgmt"
identifikuje zprávu s následujícím textem. %1", "%2", "%3" jsou zástupné symboly pro odpovídající řetězce zadané v poli 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.
Následující postup popisuje, jak tento příklad použít.
Použít příklad
Zkopírujte níže uvedený seznam MOF do textového souboru a uložte ho s příponou .mof.
V příkazovém okně zkompilujte soubor MOF pomocí následujícího příkazu:
mofcompnázev souboru**.mof**
Spusťte Eventvwr.exe. Prohlédněte si protokol událostí aplikace. Měla by se zobrazit událost s ID = 10 (id události ), zdroj = "WMI" a typ = chyba.
Poklikejte na zprávu typu Informace ze služby WMI s 10 ve sloupci událostí. Pro událost se zobrazí následující popis.
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";
};
Související témata