Megosztás a következőn keresztül:


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:

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

  1. 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.

  2. 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.

  3. Á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";
    };
    
  4. 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.

     

  5. 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.

  6. Á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 <mofcomp és a IMofCompiler 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.

WMI-szolgáltatói fejlesztése

Namepace biztonsági leírók beállítása

szolgáltatói biztonságossá tétele