Sdílet prostřednictvím


Odeslání události pomocí IoWMIWriteEvent

Ovladač může zavolat IoWMIWriteEvent, aby odeslal jakoukoli událost. Událost se může skládat z jedné položky, jedné instance nebo všech instancí datového bloku a může používat dynamické názvy instancí.

Na rozdíl od struktury WNODE_XXX předávané pomocí požadavků na dotazy nebo změny, které jsou přiděleny a částečně inicializovány WMI rozhraním, musí ovladač přidělit a inicializovat všechny členy této struktury WNODE_XXX, která obsahuje událost.

Ovladač musí událost odeslat až poté, co služba WMI odeslala IRP_MN_ENABLE_EVENTS žádost o povolení události. Potom, když dojde k aktivační podmínce události, ovladač:

  1. Přidělí vyrovnávací paměť z nestránkového fondu tak, aby obsahovala strukturu WNODE_XXX potřebnou pro událost, včetně prostoru pro data proměnných, pokud nějaká existují.

    V závislosti na události může ovladač přidělit WNODE_SINGLE_ITEM, WNODE_SINGLE_INSTANCE nebo WNODE_ALL_DATA události. Velikost WNODE_XXX plus dat proměnné nesmí překročit limit 1K definovaný registrem.

  2. Inicializuje všechny členy struktury WNODE_XXX , včetně WnodeHeader.Flags:

    • Ovladač nastaví příznak WNODE_FLAG_EVENT_ITEM označující, že struktura je událost.

    • Ovladač nastaví jeden z následujících příznaků, který označuje typ struktury WNODE_XXX :

      WNODE_FLAG_ALL_DATA – Všechny údaje značky WNODE_FLAG

      WNODE_FLAG_SINGLE_INSTANCE

      WNODE_FLAG_SINGLE_ITEM

    • Ovladač nastaví nebo vymaže následující příznaky, které označují, jestli blok používá statické nebo dynamické názvy instancí:

      WNODE_FLAG_STATIC_INSTANCE_NAMES

      WNODE_FLAG_PDO_INSTANCE_NAMES

    • Ovladač může v závislosti na události nastavit další příznaky.

  3. Přetypuje ukazatel na WNODE_XXX na PWNODE_EVENT_ITEM.

  4. Zavolá IoWMIWriteEvent s ukazatelem.

    Pokud se IoWMIWriteEvent úspěšně dokončí, služba WMI uvolní paměť přidělenou ovladačem pro událost.

Jakmile se IoWMIWriteEvent vrátí, ovladač obnoví monitorování podmínky triggeru události a odešle událost pokaždé, když je splněna její podmínka triggeru, dokud služba WMI neodešle požadavek IRP_MN_DISABLE_EVENTS na zakázání této události.

Pokud velikost události překročí maximální velikost definovaného registru 1K (nedoporučuje se), ovladač by měl volat IoWmiWriteEvent s inicializovaným WNODE_EVENT_REFERENCE , který určuje identifikátor GUID události, jeho velikost a index instance (pro názvy statických instancí) nebo název (pro dynamické názvy instancí). Rozhraní WMI použije informace v WNODE_EVENT_REFERENCE pro dotaz na událost.

Ovladač může odeslat události, které nepoužívají dynamické názvy instancí a které se skládají z jedné instance voláním rutiny knihovny WMI WmiFireEvent. Ovladač nemusí přidělit a inicializovat strukturu WNODE_XXX pro volání WmiFireEvent . WMI zabalí data události ovladače do WNODE_SINGLE_INSTANCE a doručí je příjemcům dat. Další informace o odesílání událostí pomocí WmiFireEvent naleznete v tématu Odeslání události pomocí WmiFireEvent.