Tworzenie filtru zdarzeń
Filtr zdarzeń to klasa WMI, która opisuje zdarzenia, które usługa WMI dostarcza użytkownikowi fizycznemu. Na przykład filtr zdarzeń może poinstruować usługę WMI, aby dostarczała użytkownikowi wszystkie zdarzenia zarządzania energią lub wszystkie zdarzenia ponownego uruchamiania systemu. Filtr zdarzeń opisuje również warunki, w których usługa WMI dostarcza zdarzenia. Filtr zdarzeń może określać zdarzenie wewnętrzne lub zewnętrzne; i filtr może odwoływać się do zdarzeń, które pochodzą z przestrzeni nazw — czyli innej niż przestrzeń nazw filtru. Stały konsument musi mieć te same CreatorSID w instancjach konsumenta, filtru i powiązania. Aby uzyskać więcej informacji, zobacz Bezpieczne odbieranie zdarzeń.
Poniższa procedura opisuje sposób tworzenia filtru zdarzeń.
Aby utworzyć filtr zdarzeń
Utwórz wystąpienie klasy systemowej WMI __EventFilter.
Utwórz unikalny identyfikator dla filtru za pomocą właściwości Nazwa, na jednym z dwóch sposobów:
Użyj schematu prywatnego.
Dowolne nadawanie nazw filtrom zdarzeń działa tak długo, jak nie ma konfliktu z innymi schematami nazewnictwa filtrów. Należy unikać konfliktów nazewnictwa, ponieważ dodanie wystąpienia ze zduplikowaną wartością Name zastępuje stare wystąpienie.
Użyj globalnie unikatowego identyfikatora (GUID).
Jeśli Nazwa jest pusta, WMI wypełnia Nazwa wartością GUID.
Opisz typ zdarzenia, które ma być filtrowane za pomocą właściwości Query.
Właściwość Query zawiera zapytanie WMI Query Language (WQL), które opisuje typ filtrowanego zdarzenia. Precyzyjne filtrowanie można osiągnąć przy użyciu różnych operatorów i rozszerzeń w języku WQL.
Zdarzenie dziennika NT jest generowane, gdy zapytanie od użytkownika zdarzenia trwałego kończy się niepowodzeniem. Źródłem zdarzenia jest WinMgmt, identyfikator zdarzenia to 10, a typ zdarzenia to Błąd.
Usługa WMI jest wydajniejsza w przypadku przetwarzania restrykcyjnych, specyficznych zapytań niż szerokie zapytania. Tworząc określone zapytanie, można uniknąć niepotrzebnej komunikacji między procesami i ruchu sieciowego. W przypadku zdarzeń generowanych przez dostawcę, usługa WMI wykonuje filtrowanie wewnątrz procesu dostawcy; zapewnia to, że tylko zdarzenia pasujące do filtru ponoszą koszt komunikacji międzyprocesowej. Aby uzyskać więcej informacji, zobacz Querying WMI.
Ustaw właściwość QueryLanguage na typ języka zapytań używany we właściwości Query.
Prawie zawsze ustawisz QueryLanguage na wartość "WQL".
W poniższym przykładzie kodu opisano filtr zdarzeń, który sygnalizuje zdarzenie za każdym razem, gdy usługa WMI tworzy wystąpienie klasy __TimerEvent w przestrzeni nazw root\cimv2.
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};
};
Właściwość EventNamespace określa przestrzeń nazw, z której pochodzą zdarzenia. Nie trzeba tworzyć instancji filtrów w przestrzeni nazw, z której pochodzą zdarzenia. Jeśli nie określisz przestrzeni nazw, usługa WMI utworzy filtr w domyślnej przestrzeni nazw. Klasy zdarzeń wewnętrznych, takie jak __InstanceOperationEvent, są dostępne w każdej przestrzeni nazw.
Aby zarejestrować użytkownika logicznego na potrzeby powiadomień o zdarzeniach, należy powiązać filtry zdarzeń z odbiorcą logicznym. Aby uzyskać więcej informacji, zobacz Wiązanie filtru zdarzeń z odbiorcą logicznym.