Vytvoření filtru událostí
Filtr událostí je třída rozhraní WMI, která popisuje, které události WMI doručí fyzickému příjemci. Filtr událostí může například dát službě WMI pokyn, aby doručovala spotřebiteli všechny události řízení spotřeby nebo všechny události restartování systému. Filtr událostí také popisuje podmínky, za kterých rozhraní WMI události doručuje. Filtr událostí může určit vnitřní nebo extrinsickou událost; a filtr může odkazovat na události pocházející z oboru názvů – to znamená jiné než obor názvů filtru. Trvalý příjemce musí mít stejné CreatorSID v instancích příjemce, filtru a vazeb. Další informace naleznete v tématu Bezpečný příjem událostí.
Následující postup popisuje, jak vytvořit filtr událostí.
Vytvoření filtru událostí
Vytvořte instanci systémové třídy služby WMI __EventFilter.
Vytvořte jedinečný identifikátor filtru s vlastností Name jedním ze dvou způsobů:
Použijte privátní schéma.
Libovolné pojmenování filtrů událostí funguje, pokud není v konfliktu s jinými schématy pojmenování filtru. Musíte se vyhnout konfliktům názvů, protože přidání instance s duplicitním názvem Název přepíše starou instanci.
Použijte globálně jedinečný identifikátor (GUID).
Pokud Název ponecháte prázdný, rozhraní WMI vyplní Název identifikátorem GUID.
Popište typ události, kterou chcete filtrovat pomocí vlastnosti Query.
Vlastnost Query obsahuje dotaz WMI Query Language (WQL), který popisuje typ události, kterou chcete filtrovat. Přesné filtrování můžete dosáhnout pomocí různých operátorů a rozšíření jazyka WQL.
Událost protokolu NT se vygeneruje, když selže dotaz z trvalého příjemce událostí. Zdrojem události je WinMgmt, ID události je 10 a typ události je Chyba.
Rozhraní WMI je efektivnější při zpracování omezujících, specifických dotazů než rozsáhlých dotazů. Vytvořením konkrétního dotazu se můžete vyhnout zbytečné komunikaci mezi procesy a síťovému provozu. V případě událostí vygenerovaných poskytovatelem provede rozhraní WMI filtrování v procesu poskytovateli; tím se zajistí, že náklady na komunikaci mezi procesy účtují pouze události odpovídající filtru. Další informace najdete v tématu Dotazování rozhraní WMI.
Nastavte vlastnost QueryLanguage na typ dotazovacího jazyka, který používáte ve vlastnosti Query.
Téměř vždy nastavíte QueryLanguage na "WQL".
Následující příklad kódu popisuje filtr událostí, který signalizuje událost pokaždé, když WMI vytvoří instanci třídy __TimerEvent v kořenovém/cimv2 oboru názvů.
instance of __EventFilter as $FILTER
{
Name = "MyFilterName";
Query = "select * from __TimerEvent where TimerID=\"MyTimer\"";
QueryLanguage = "WQL";
EventNamespace = "\root\cimv2";
// this is the Administrators SID in array of bytes format
CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0};
};
Vlastnost EventNamespace určuje obor názvů, ze kterého události pocházejí. V oboru názvů, kde události pocházejí, nemusíte vytvářet instanci filtrů. Pokud nezadáte obor názvů, WMI vytvoří filtr ve výchozím oboru názvů. Vnitřní třídy událostí, například __InstanceOperationEvent jsou k dispozici v každém oboru názvů.
Pokud chcete zaregistrovat logického příjemce pro oznámení událostí, musíte svázat filtry událostí s logickým příjemcem. Další informace najdete v tématu Vázání filtru událostí s logickým příjemcem.