Registrace poskytovatele
Před implementací poskytovatele byste nejprve měli zaregistrovat svého poskytovatele ve službě WMI. Registrace zprostředkovatele definuje typ zprostředkovatele a třídy, které poskytovatel podporuje. WMI má přístup pouze k registrovaným poskytovatelům.
Poznámka
Další informace o registraci poskytovatele MI naleznete v tématu Postupy: Registrace poskytovatele MI.
Kód zprostředkovatele můžete napsat před registrací poskytovatele. Je však velmi obtížné ladit poskytovatele, který není zaregistrovaný ve službě WMI. Určení rozhraní pro vašeho poskytovatele také pomáhá nastínit účel a strukturu poskytovatele. Proto registrace poskytovatele pomáhá při navrhování vašeho poskytovatele.
Poskytovatele můžou zaregistrovat nebo odstranit jenom správci.
Zprostředkovatel musí být zaregistrovaný pro všechny různé typy funkcí poskytovatele, které provádí. Téměř všichni poskytovatelé poskytují instance tříd, které definují, ale mohou také poskytovat data vlastností, metody, události nebo třídy. Zprostředkovatel může být také registrován jako poskytovatel příjemce událostí nebo poskytovatel čítače výkonu. Doporučujeme zkombinovat všechny funkce zprostředkovatele v jednom poskytovateli, nikoli mít pro každý typ mnoho samostatných poskytovatelů. Příkladem je poskytovatel systémového registru, který poskytuje metody a instance a poskytovatel kvót disků, který poskytuje instance, metody a události.
Zprostředkovatel musí být zaregistrovaný pro všechny různé typy funkcí poskytovatele, které provádí. Téměř všichni poskytovatelé poskytují instance tříd, které definují, ale mohou také poskytovat data vlastností, metody, události nebo třídy. Zprostředkovatel může být také registrován jako poskytovatel přijímače událostí nebo poskytovatel čítače výkonu.
Stejná instance __Win32Provider se používá pro každý typ registrace:
- Registrace Poskytovatele Instance
- registrace poskytovatele tříd
- Registrace Poskytovatele Metody
- registrace poskytovatele událostí
- Registrace poskytovatele zpracování událostí
- vytvoření zprostředkovatele instance na poskytovatele High-Performance
Příklad: Vytvoření a registrace instance zprostředkovatele
Následující příklad ukazuje soubor MOF, který vytvoří a zaregistruje instanci poskytovatele System Registry v oboru názvů root\cimv2. Přiřadí alias $Reg poskytovateli, aby se vyhnulo dlouhému názvu cesty, který je vyžadován při registracích instancí a metod. Další informace naleznete v tématu Vytvoření aliasu.
// Place the Registry provider in the root\cimv2 namespace
#pragma namespace("\\\\.\\ROOT\\cimv2")
// Create an instance of __Win32Provider
instance of __Win32Provider as $Reg
{
Name = "RegProv";
CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
HostingModel = "NetworkServiceHost:LocalServiceHost";
};
// Register as an instance provider by
// creating an instance
// of __InstanceProviderRegistration
instance of __InstanceProviderRegistration
{
provider = $Reg;
SupportsDelete = FALSE;
SupportsEnumeration = TRUE;
SupportsGet = TRUE;
SupportsPut = TRUE;
};
// Register as a method provider by
// creating an instance
// of __MethodProviderRegistration
instance of __MethodProviderRegistration
{
provider = $Reg;
};
// Define the StdRegProv class
[dynamic: ToInstance, provider("RegProv")]
class StdRegProv
{
[implemented, static] uint32 CreateKey(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName);
[implemented, static] uint32 DeleteKey(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName);
[implemented, static] uint32 EnumKey(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[OUT] string sNames[]);
[implemented, static] uint32 EnumValues(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[OUT] string sNames[],
[OUT] sint32 Types[]);
[implemented, static] uint32 DeleteValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName);
[implemented, static] uint32 SetDWORDValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[IN] uint32 uValue = 3);
[implemented, static] uint32 GetDWORDValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[OUT] uint32 uValue);
[implemented, static] uint32 SetStringValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[IN] string sValue = "hello");
[implemented, static] uint32 GetStringValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[in] string sValueName,
[OUT] string sValue);
[implemented, static] uint32 SetMultiStringValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[IN] string sValue[] = {"hello", "there"});
[implemented, static] uint32 GetMultiStringValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[OUT] string sValue[]);
[implemented, static] uint32 SetExpandedStringValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[IN] string sValue = "%path%");
[implemented, static] uint32 GetExpandedStringValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[OUT] string sValue);
[implemented, static] uint32 SetBinaryValue(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[in] string sValueName,
[in] uint8 uValue[] = {1, 2});
[implemented, static] uint32 GetBinaryValue(
{IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] string sValueName,
[OUT] uint8 uValue[]);
[implemented, static] uint32 CheckAccess(
[IN] uint32 hDefKey = 2147483650,
[IN] string sSubKeyName,
[IN] uint32 uRequired = 3,
[OUT] boolean bGranted);
};
Příklad: Registrace zprostředkovatele
Následující postup popisuje, jak zaregistrovat poskytovatele.
Registrace poskytovatele
Zaregistrujte poskytovatele jako server COM.
V případě potřeby možná budete muset vytvořit položky registru. Tento proces platí pro všechny servery COM a nesouvisí s rozhraním WMI. Další informace naleznete v části COM v dokumentaci sady Microsoft Windows Software Development Kit (SDK).
Vytvořte soubor MOF, který obsahuje instance __Win32Provider a instanci třídy odvozené buď přímo nebo nepřímo z __ProviderRegistration, například __InstanceProviderRegistration. Pouze správci mohou zaregistrovat nebo odstranit poskytovatele vytvořením instancí tříd odvozených z __Win32Provider nebo __ProviderRegistration.
Nastavte HostingModel v instanci __Win32Provider podle hodnot v modelech hostingu .
Poznámka
Pokud poskytovatel nevyžaduje vysoká oprávnění účtu LocalSystem, měla by být vlastnost __Win32Provider.HostingModel nastavena na NetworkServiceHost. Další informace naleznete v tématu Poskytovatel hostingu a zabezpečení.
Následující příklad MOF z úplného příkladu ukazuje kód, který vytvoří instanci __Win32Provider.
instance of __Win32Provider as $Reg { Name = "RegProv"; CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"; HostingModel = "NetworkServiceHost:LocalServiceHost"; };
Instance třídy, která je odvozena buď přímo nebo nepřímo z __ProviderRegistration, za účelem popisu logické implementace zprostředkovatele. Poskytovatel může být zaregistrován pro několik různých druhů funkcionalit. Výše uvedený příklad registruje RegProv jako instanci a poskytovatele metod. Pokud však RegProv tuto funkci podporuje, může být registrován také jako poskytovatel vlastností nebo událostí. Následující tabulka uvádí třídy, které registrují funkce poskytovatele.
Třídy pro registraci zprostředkovatele Popis __InstanceProviderRegistration Registruje jako poskytovatele instance. __EventProviderRegistration Registruje poskytovatele událostí. __EventConsumerProviderRegistration Zaregistruje poskytovatele příjemce událostí. __MethodProviderRegistration Zaregistruje poskytovatele metody . __PropertyProviderRegistration Zaregistruje poskytovatele vlastností. Soubor MOF umístěte do trvalého adresáře.
Soubor byste obvykle měli umístit do instalačního adresáře poskytovatele.
Zkompilujte soubor MOF pomocí mofcomp nebo rozhraní IMofCompiler.
Další informace najdete v tématu Kompilace souborů MOF.
Windows 8 a Windows Server 2012: Při instalaci zprostředkovatelů mofcomp i IMofCompiler rozhraní zachází s kvalifikátory [Klíč] a [Static] jako pravdivé, pokud existují, bez ohledu na jejich skutečné hodnoty. Ostatní kvalifikátory jsou považovány za false, pokud jsou přítomné, ale nejsou explicitně nastaveny na true.
Související témata