Udostępnij przez


Wysyłanie zdarzeń WMI

Sterownik może używać zdarzeń WMI do powiadamiania aplikacji działających w trybie użytkownika o zdarzeniach, eliminując konieczność okrężnego sprawdzania lub wysyłania pakietów żądań I/O przez te aplikacje. Sterownik powinien używać zdarzeń usługi WMI do powiadamiania klientów usługi WMI o wyjątkowych warunkach, a nie jako alternatywy dla rejestrowania błędów. Sterownik powinien obsługiwać wszystkie standardowe bloki zdarzeń zdefiniowane dla typu urządzenia w pliku Wmicore.mof i mogą definiować i rejestrować dodatkowe niestandardowe bloki zdarzeń w celu obsługi powiadomień specyficznych dla urządzenia.

Blok zdarzeń to po prostu blok danych pochodzący z abstrakcyjnej klasy bazowej WMIEvent. Blok zdarzeń może zawierać dowolne z tych samych danych co blok danych lub może być pusty — czyli blok zdarzeń nie musi zawierać żadnych elementów danych zdefiniowanych przez sterownik. Jeśli blok zdarzeń zawiera dane, łączny rozmiar WNODE_XXX oraz dane nie powinny przekraczać limitu zdefiniowanego przez rejestr wynoszący 1 kilobajt. Ogólnie rzecz biorąc, mniejsze zdarzenia powodują lepszą wydajność systemu i bardziej terminowe powiadomienia. Aby uzyskać informacje na temat definiowania bloków, zobacz Składnia MOF dla bloków danych i zdarzeń usługi WMI oraz Projektowanie danych i bloków zdarzeń usługi WMI.

Sterownik sygnalizuje wsparcie dla zdarzenia poprzez zarejestrowanie odpowiedniego bloku zdarzeń, przy czym w strukturze bloku WMIREGGUID ustawiono WMIREG_FLAG_EVENT_ONLY_GUID. Aby uzyskać informacje na temat rejestrowania bloków, skorzystaj z sekcji Rejestrowanie jako dostawca danych WMI.

Gdy użytkownik klienta usługi WMI zażąda powiadomienia o zdarzeniu, usługa WMI wysyła do sterownika żądanie IRP_MN_ENABLE_EVENTS , które powiadamia sterownik o rozpoczęciu monitorowania warunku wyzwalacza określonego przez sterownik zdarzenia. Następnie, gdy wystąpi warunek wyzwolenia, sterownik wysyła zdarzenie do WMI, która dostarcza je do wszystkich odbiorców danych zarejestrowanych na to zdarzenie.

Sterownik wysyła zdarzenie do usługi WMI w jeden z następujących sposobów:

  • Wywołaj procedurę biblioteki trybu jądra WMI WmiFireEvent. Sterownik może wywołać metodę WmiFireEvent aby wysyłać tylko zdarzenia, które nie używają nazw wystąpień dynamicznych, i bazować nazwy statycznych wystąpień na jednym podstawowym ciągu nazwy lub identyfikatorze wystąpienia urządzenia PDO. Ponadto zdarzenie musi być pojedynczym wystąpieniem — czyli sterownik nie może wywołać klasy WmiFireEvent w celu wysłania zdarzenia składającego się z jednego elementu lub wielu wystąpień. Aby uzyskać więcej informacji, zobacz Wysyłanie zdarzenia za pomocą programu WmiFireEvent.

  • Wywołaj procedurę trybu jądra IoWMIWriteEvent wskaźnikiem do przydzielonej przez sterownik i zainicjowanej struktury WNODE_XXX zawierającej dane zdarzenia. Aby uzyskać więcej informacji, zobacz Wysyłanie zdarzenia za pomocą IoWMIWriteEvent.