Sdílet prostřednictvím


Trasování událostí služby WMI

Tato část popisuje rozšíření WMI pro WDM (podporovaná systémem Windows 2000 a novější), které ovladače režimu jádra mohou jako poskytovatelé informací použít k poskytování informací příjemcům informací. Ovladače obvykle poskytují informace, které uživatel používá k určení konfigurace a využití prostředků ovladače. Kromě rozšíření rozhraní WMI pro WDM podporuje rozhraní API v uživatelském režimu poskytovatele nebo uživatele informací o událostech rozhraní WMI – další informace najdete v sadě Windows SDK.

Protokolovací rutina pro trasování událostí podporuje až 32 instancí. Jedna z instancí je vyhrazená pro trasování jádra. Logger podporuje trasování vysokého počtu událostí.

Události trasování se definují stejným způsobem jako jiné události rozhraní WMI. Události rozhraní WMI jsou popsány v souboru MOF. Další informace o popisech událostí rozhraní WMI najdete v tématu Syntaxe MOF pro data rozhraní WMI a bloky událostí.

Proces, podle kterého jsou informace protokolu ovladačů v režimu jádra integrované do stávající infrastruktury rozhraní WMI. Pokud chcete protokolovat události trasování, ovladač provede následující akce:

  1. Zaregistrujte se jako zprostředkovatel rozhraní WMI voláním IoWMIRegistrationControl.

  2. Označte události jako trasovatelné nastavením WMIREG_FLAG_TRACED_GUID ve členu struktury WMIREGGUID, která se předává, když ovladač registruje události s WMI.

  3. Zadejte jednu událost jako řídicí událost pro celkové povolení nebo zakázání sady událostí trasování nastavením WMIREG_FLAG_TRACE_CONTROL_GUID v členu Flags struktury WMIREGGUID, která se předává, když ovladač registruje události s WMI.

  4. Po obdržení požadavku od rozhraní WMI na povolení událostí, kde identifikátor GUID odpovídá identifikátoru GUID ovládacího prvku trasování, by měl ovladač uložit popisovač do loggeru. Tato hodnota bude potřeba při psaní události. Informace o použití tohoto popisovače najdete v kroku 6. Hodnota popisovače protokolovacího modulu je obsažena v členu HistoricalContext v WNODE_HEADER části WMI vyrovnávací paměti, která je součástí parametrů v žádosti o povolení událostí.

  5. Rozhodněte se, jestli se událost trasování odešle příjemcům událostí rozhraní WMI nebo je určena pouze pro protokolovací modul událostí rozhraní WMI. Tím určíte, odkud by měla pocházet paměť pro EVENT_TRACE_HEADER strukturu . Tato paměť bude nakonec předána službě IoWMIWriteEvent.

    Pokud je událost pouze událostí protokolu, služba WMI paměť neodstraní. V tomto případě by ovladač měl předat vyrovnávací paměť zásobníku nebo by měl znovu použít přidělenou vyrovnávací paměť pro tento účel. Z důvodů výkonu by ovladač měl minimalizovat všechna nepotřebná volání pro přidělení nebo uvolnění paměti. Pokud toto doporučení nedodržíte, dojde k ohrožení integrity informací o časování obsažených v souboru protokolu.

    Pokud se má událost odeslat jak do protokolovacího nástroje, tak příjemcům událostí rozhraní WMI, musí být paměť přidělena z nestránkového fondu. V takovém případě se událost odešle do loggeru, poté se předá rozhraní WMI a odešle příjemcům událostí WMI, kteří požádali o oznámení události. Paměť pro událost následně uvolní WMI podle chování IoWMIWriteEvent.

  6. Po zabezpečení paměti pro EVENT_TRACE_HEADER a všechna data událostí ovladače, pokud jsou nějaká, by měly být nastaveny následující informace:

    Nastavte člen Velikost na sizeof(EVENT_TRACE_HEADER) plus velikost dalších dat události ovladače, která budou připojena ke konci EVENT_TRACE_HEADER.

    Nastavte člena Flags na WNODE_FLAG_TRACED_GUID, aby se událost odeslala do protokolovacího nástroje. Pokud má být událost také zaslána příjemcům událostí WMI, nastavte WNODE_FLAG_LOG_WNODE. Všimněte si, že při nastavení WNODE_FLAG_LOG_WNODE není nutné nastavit WNODE_FLAG_TRACED_GUID. Pokud jsou obě nastavené, bude mít WNODE_FLAG_TRACED_GUID přednost a událost se neodesílá k příjemcům událostí rozhraní WMI.

    Nastavte identifikátor GUID nebo člen GuidPtr . Pokud používáte GuidPtr, nastavte WNODE_FLAG_USE_GUID_PTR v členu Flags .

    Volitelně můžete zadat hodnotu pro časové razítko. Pokud ovladač nezadá hodnotu časového razítka , protokolovací nástroj tuto hodnotu vyplní. Pokud ovladač nechce, aby záznamník nastavil časové razítko, měl by nastavit WNODE_FLAG_USE_TIMESTAMP v členu Flags.

    Nastavte některý z následujících EVENT_TRACE_HEADER členů, které mají význam pro ovladač: Class.Type, Class.Level a Class.Version.

    Nakonec přetypujte EVENT_TRACE_HEADER na WNODE_HEADER a nastavte hodnotu HistoricalContextWnode na popisovač zapisovače, který byl uložen v kroku 4 výše.

  7. Zavolejte IoWMIWriteEvent s ukazatelem na strukturu EVENT_TRACE_HEADER.

Ovladač by měl pokračovat v protokolování trasovacích událostí spojených s GUID řízení, dokud ovladač neobdrží oznámení o vypnutí protokolování událostí prostřednictvím požadavku IRP_MN_DISABLE_EVENTS.