Udostępnij przez


Wysyłanie zdarzenia za pomocą programu WmiFireEvent

Sterownik może wywołać WmiFireEvent, aby wysyłać zdarzenia, które nie używają dynamicznych nazw wystąpień, i które bazują nazwy statycznych wystąpień na jednym podstawowym ciągu nazwy lub identyfikatorze wystąpienia urządzenia PDO.

Zdarzenie musi być pojedynczym wystąpieniem bloku — czyli sterownik nie może wywołać WmiFireEvent, aby wysłać zdarzenie składające się z jednego elementu lub wielu wystąpień. Aby wysyłać takie zdarzenia, sterownik musi wywołać IoWMIWriteEvent, zgodnie z opisem w Wysyłanie zdarzenia przy użyciu IoWMIWriteEvent.

Sterownik nie powinien wysyłać zdarzeń, dopóki usługa WMI nie włączy zdarzenia. Po włączeniu zdarzenia po wystąpieniu warunku wyzwalacza zdarzenia sterownik:

  1. Przydziela bufor z puli niestronicowanej i zapisuje dane zdarzenia do buforu. Jeśli zdarzenie nie zawiera żadnych danych, sterownik może pominąć ten krok.

  2. Wywołuje WmiFireEvent z następującymi parametrami:

    • Wskaźnik do obiektu urządzenia sterownika

    • Wskaźnik do identyfikatora GUID reprezentującego blok zdarzeń

    • Jeśli blok zdarzeń ma wiele wystąpień, indeks wystąpienia

    • Jeśli dane mają być wysyłane ze zdarzeniem, liczba bajtów danych lub 0, jeśli nie

    • Jeśli dane mają być wysyłane ze zdarzeniem, wskaźnik do bufora przydzielonego przez sterownik, który zawiera dane, lub NULL, jeśli nie ma takich danych.

    Sterownik musi przydzielić wszystkie parametry przekazane do WmiFireEvent, w tym bufor danych zdarzenia, z puli niestronicowanej. Usługa WMI zwalnia pamięć przydzieloną przez sterownik bez dalszej interwencji sterownika.

Po zakończeniu działania funkcji WmiFireEvent, sterownik wznawia monitorowanie warunku wyzwalacza zdarzenia i wysyła zdarzenie za każdym razem, gdy wystąpi warunek wyzwalacza, aż do momentu, gdy usługa WMI wyłączy to zdarzenie.