Szolgáltató regisztrálása
A szolgáltató implementálása előtt először regisztrálnia kell a szolgáltatót a WMI-ben. A szolgáltató regisztrálása határozza meg a szolgáltató típusát és a szolgáltató által támogatott osztályokat. A WMI csak regisztrált szolgáltatókhoz fér hozzá.
Jegyzet
A MI-szolgáltató regisztrálásával kapcsolatos további információkért lásd: Mi-szolgáltató regisztrálása.
A szolgáltató regisztrálása előtt megírhatja a szolgáltató kódját. Azonban nagyon nehéz hibakeresést végezni egy olyan szolgáltatón, amely nincs regisztrálva a WMI-ben. A szolgáltató felületeinek meghatározása segít a szolgáltató céljának és szerkezetének felvázolásában is. Ezért a szolgáltató regisztrálása segít megtervezni a szolgáltatót.
Csak rendszergazdák regisztrálhatnak vagy törölhetnek szolgáltatót.
Minden olyan különböző típusú szolgáltatói funkcióhoz, amelyet végrehajt, regisztrálni kell a szolgáltatót. Szinte minden szolgáltató az általuk definiált osztályok példányait biztosítja, de tulajdonságadatokat, metódusokat, eseményeket vagy osztályokat is biztosíthat. A szolgáltató eseményfelhasználóként vagy teljesítményszámláló szolgáltatóként is regisztrálható. Javasoljuk, hogy az összes szolgáltatói funkciót egyetlen szolgáltatóban kombinálja ahelyett, hogy minden típushoz több különálló szolgáltatót kellene használnia. Ilyen például a rendszerregisztrációs adatbázis-szolgáltató, amely metódusokat és példányokat biztosít, valamint a lemezkvóta-szolgáltató, amely példányokat, metódusokat és eseményeket biztosít.
A szolgáltatót regisztrálni kell az általa végrehajtott összes különböző típusú szolgáltatói funkcióhoz. Szinte minden szolgáltató az általuk definiált osztályok példányait biztosítja, de tulajdonságadatokat, metódusokat, eseményeket vagy osztályokat is biztosíthat. A szolgáltató eseményfelhasználóként vagy teljesítményszámláló szolgáltatóként is regisztrálható.
Az egyes regisztrációs típusokhoz ugyanazt a __Win32Provider-példányt használják:
- Egy példányszolgáltató regisztrálása
- Osztályszolgáltató regisztrálása
- Metódusszolgáltatói regisztrálása
- Esemény szolgáltató regisztrálása
- Eseményfogyasztó szolgáltató regisztrálása
- Példányszolgáltatót High-Performance szolgáltatóvá alakítás
Példa: Egy szolgáltató példányának létrehozása és regisztrálása
Az alábbi példa egy MOF-fájlt mutat be, amely létrehozza és regisztrálja a Rendszerregisztrációs adatbázis-szolgáltató egy példányát, a root\cimv2 névtérben. Az alias $Reg hozzárendelése a szolgáltatóhoz lehetővé teszi a hosszú elérési utak elkerülését a példány- és metódusregisztrációk során. További információért lásd: Alias létrehozása.
// 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élda: Szolgáltató regisztrálása
Az alábbi eljárás bemutatja, hogyan regisztrálhat szolgáltatót.
Egy szolgáltató regisztrációja
Regisztrálja a szolgáltatót COM-kiszolgálóként.
Szükség esetén előfordulhat, hogy beállításjegyzék-bejegyzéseket kell létrehoznia. Ez a folyamat az összes COM-kiszolgálóra vonatkozik, és nem kapcsolódik a WMI-hez. További információkért tekintse meg a Microsoft Windows Software Development Kit (SDK) dokumentációjának COM szakaszát.
Hozzon létre egy MOF-fájlt, amely __Win32Provider példányait és egy osztály egy példányát tartalmazza, amely közvetlenül vagy közvetve származik __ProviderRegistration, például __InstanceProviderRegistration. Csak a rendszergazdák regisztrálhatnak vagy törölhetnek szolgáltatót a __Win32Provider vagy __ProviderRegistrationszármazó osztályok példányainak létrehozásával.
Állítsa be a HostingModel a __Win32Provider példányában a Üzemeltetési modellekértékeinek megfelelően.
Jegyzet
Hacsak a szolgáltató nem igényli a LocalSystem-fiók magas szintű jogosultságait, a __Win32Provider.HostingModel tulajdonságot a "NetworkServiceHost" értékre kell állítani. További információ: Provider Hosting and Security.
A teljes példában szereplő alábbi MOF-példa a __Win32Provideregy példányát létrehozó kódot mutatja be.
instance of __Win32Provider as $Reg { Name = "RegProv"; CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"; HostingModel = "NetworkServiceHost:LocalServiceHost"; };
Egy osztály példánya, amely közvetlenül vagy közvetve a __ProviderRegistrationosztályból származik, a szolgáltató logikai implementációjának leírására. A szolgáltató több különböző funkciótípusra is regisztrálható. A fenti példa a RegProvot regisztrálja példányként és metódusszolgáltatóként. Ha azonban a RegProv támogatja a funkciót, az is regisztrálható tulajdonságként vagy eseményszolgáltatóként. Az alábbi táblázat a szolgáltatói funkciókat regisztráló osztályokat sorolja fel.
Szolgáltató regisztrációs osztályok Leírás __InstanceProviderRegistration Regisztrál egy -példányszolgáltatót. __EventProviderRegistration Regisztrál egy eseményszolgáltatót. __EventConsumerProviderRegistration Regisztrál egy eseményfelhasználói szolgáltatót. __MethodProviderRegistration Regisztrál egy metódusszolgáltatót. __PropertyProviderRegistration Regisztrál egy tulajdonságszolgáltatót. Helyezze az MOF-fájlt egy állandó könyvtárba.
A fájlt általában a szolgáltató telepítési könyvtárába kell helyeznie.
Állítsa össze az MOF-fájlt mofcomp vagy az IMofCompiler felület használatával.
További információkért lásd: MOF-fájlok fordítása.
Windows 8 és Windows Server 2012: A szolgáltatók telepítésekor a < és amofcomp felület egyaránt igazként kezeli a [Key] és a [Static] minősítőket, ha azok jelen vannak, függetlenül azok tényleges értékeitől. A többi minősítő hamisként lesz kezelve, ha jelen vannak, de nincs explicit módon igaz értékre állítva.IMofCompiler
Kapcsolódó témakörök
-
WMI-szolgáltatói fejlesztése
-
szolgáltatói biztonságossá tétele