Sdílet prostřednictvím


Registrace zprostředkovatele třídy

Chcete-li vytvořit poskytovatele třídy WMI, musíte zaregistrovat __Win32Provider instanci, která představuje vašeho poskytovatele, pomocí instance __ClassProviderRegistration. Jako objekt COM se musí váš poskytovatel zaregistrovat v operačním systému a rozhraní WMI. Následující postup předpokládá, že jste již implementovali proces registrace, jak je popsáno v Registrace poskytovatele. Pokud váš poskytovatel ukládá většinu dat v úložišti WMI a tato data se aktualizují jenom při inicializaci rozhraní WMI, zaregistrujte třídu jako poskytovatele třídy push. Pokud se data, která poskytujete, často mění a jsou dynamicky načítána vaším kódem při každém požadavku z WMI, zaregistrujte svého poskytovatele jako poskytovatele pull třídy.

Následující postup popisuje, jak zaregistrovat poskytovatele třídy „push“.

Registrace poskytovatele pushové třídy

Následující postup popisuje, jak zaregistrovat poskytovatele třídy pull.

Registrace poskytovatele pro třídu "pull"

  1. Vytvořte instanci třídy __Win32Provider, která popisuje zprostředkovatele.

  2. Vytvořte instanci třídy __ClassProviderRegistration, která popisuje sadu funkcí zprostředkovatele.

    V instanci __ClassProviderRegistration:

    1. Nastavte vlastnost InteractionType, abyste označili, zda je poskytovatel typu push nebo pull.

    2. Označte třídu pomocí kvalifikátorů Dynamic i Provider.

      Kvalifikátor Dynamic označuje, že WMI by měl používat zprostředkovatele k načítání instancí třídy. Kvalifikátor zprostředkovatele určuje název poskytovatele, kterého má rozhraní WMI použít.

    3. Definujte ResultSetQueries, ReferencedSetQueriesa Nepodporované dotazy.

      Tyto vlastnosti dotazu popisují podrobné informace o podporované třídě.

Kromě popisu různých podporovaných metod třídy má třída __ClassProviderRegistration také tři vlastnosti, které popisují řadu dotazů. Při společném použití tyto tři vlastnosti popisují celý rozsah tříd poskytovaných poskytovatelem třídy. Každá vlastnost dotazu obsahuje příkaz WQL SELECT, označovaný jako "dotaz schématu", který určuje typy podporovaných tříd. Dotazy schématu určují název zvláštní třídy s názvem meta_class. Následující tabulka uvádí vlastnosti dotazu.

Vlastnost Popis
ResultSetQueries Obsahuje informace o sadě výsledků, které poskytovatel poskytuje. Rozhraní WMI používá informace k určení, zda vyvolat zprostředkovatele a splnit dotaz z aplikace. Tato vlastnost popisuje buď sadu všech tříd, které může poskytovatel poskytnout, nebo nadmnožinu dostupných tříd, ale nikdy podmnožinu. Rozhraní WMI vyžaduje, aby poskytovatel zadal alespoň jeden dotaz v této vlastnosti.
Následující příklad ukazuje, jak nastavit ResultSetQueries, když zprostředkovatel poskytuje třídu přidružení, která odkazuje na Win32_LogicalDisk třídy.
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
Následující příklad ukazuje, jak zadat obecný dotaz, když zprostředkovatel poskytuje třídy, které odkazují na jiné neznámé třídy.
SELECT * FROM meta_class
Následující příklad ukazuje, jak nastavit ResultSetQueries, když zprostředkovatel poskytuje pouze podtřídy, ale nikoli nadřazenou třídu dané třídy.
SELECT * FROM meta_class WHERE __Dynasty = "MyClass"
Následující příklad ukazuje, jak použít speciální __this vlastnost a nastavit ResultSetQueries, když zprostředkovatel poskytuje všechny třídy a podtřídy.
SELECT * FROM meta_class WHERE __this ISA "MyClass"
ReferencedSetQueries Určuje, jestli se má poskytovatel obejít v dotazech schématu, kde se požadují přidružení a odkazy. Zprostředkovatelé, kteří mohou poskytovat třídy přidružení, musí do vlastnosti ReferencedSetQueries zahrnout alespoň jeden dotaz.
Nepodporované dotazy Obsahuje informace o sadě výsledků, které poskytovatel třídy neposkytuje. WMI používá tuto vlastnost k odečtení ze sady tříd implikovaných ResultSetQueries. Zprostředkovatel třídy může například zadat v ResultSetQueries podporu pro všechny třídy odvozené z MyClass a zadat v NepodporovanéQueries nedostatek podpory pro jednu konkrétní odvozenou třídu.
Čím více informací může poskytovatel zaregistrovat o svých schopnostech zpracování dotazů, tím rychleji bude běžet. Zadání jednoho nebo více dotazů do vlastnosti Nepodporované dotazy je jedním ze způsobů, jak být konkrétní, a je zvlášť důležité, pokud poskytovatel spoléhá na třídu, kterou neposkytuje. Když se vytvoří požadavek na třídu, která je uvedena v dotazu v UnsupportedQueries vlastnost, WMI může zadat samotnou třídu nebo vyvolat alternativního zprostředkovatele, který ji poskytne.

Protože rozhraní WMI nepodporuje klauzuli OR, musíte pro každou třídu vytvořit samostatný dotaz.

Následující dotazy jsou zadány v ResultSetQueries, když poskytovatel třídy dodává MyClass1, MyClass2 a MyClass3.

SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"

Pouze správci mohou zaregistrovat nebo odstranit poskytovatele vytvořením instance __Win32Provider a __ClassProviderRegistration.