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


WMI-metódus létrehozása

WMI-metódus létrehozásához adja meg a metódus bemeneti és kimeneti paramétereit. A bemeneti és kimeneti paramétereket egy speciális WMI-rendszerosztály __PARAMETERSjelöli. További információ: Metódus meghívása és Metódusszolgáltató írása.

A következő szakaszokat tárgyaljuk ebben a témakörben:

WMI-osztálymetódus létrehozása az MOF-ban

A WMI-ben a szolgáltatói metódusok általában az osztály által képviselt objektumhoz kapcsolódó különböző műveletek. Ahelyett, hogy módosítanál egy tulajdonság értékét egy művelet végrehajtásához, létre kell hozni egy metódust. Engedélyezheti vagy letilthatja például az Win32_NetworkAdapter által képviselt hálózati információs központot (NIC) a Az engedélyezése és A letiltása metódusok használatával. Bár ezek a műveletek írási/olvasási tulajdonságként is megjeleníthetők, a javasolt kialakítás egy metódus létrehozása. Ha az osztály számára láthatóvá szeretne tenni egy állapotot vagy értéket, akkor az ajánlott módszer az olvasási/írási tulajdonság létrehozása módszer helyett. A Win32_NetworkAdapterNetEnabled tulajdonsága láthatóvá teszi az adapter állapotát, de az állapotok közötti módosításokat a Az engedélyezése vagy A metódus letiltása parancs hajtja végre.

Az osztálydeklarációk tartalmazhatnak egy vagy több metódus deklarációját. Dönthet úgy, hogy örökli a szülőosztály metódusait, vagy implementálja a sajátját. Ha a saját metódusok implementálása mellett dönt, deklarálnia kell a metódust, és meg kell jelölnie a metódust adott minősítőcímkékkel.

Az alábbi eljárás azt ismerteti, hogyan deklarálhat egy olyan metódust egy olyan osztályban, amely nem öröklődik egy alaposztálytól.

Metódus deklarálása

  1. Határozza meg a metódus nevét egy osztálydeklaráció kapcsos zárójeleiben, minősítők mögött.

    Az alábbi példakód egy metódus szintaxisát ismerteti.

    [Dynamic, Provider ("ProviderName")]
    class ClassName
    {
        [Implemented] <ReturnType> <MethodName>
            ([ParameterDirection, IDQualifier] 
            <ParameterType> <ParameterName>);
    };
    
  2. Ha végzett, szúrja be a felügyelt objektumformátum (MOF) kódját a WMI-adattárba az MOF-fordító hívásával.

    További információért lásd: MOF-fájlok fordítása.

Az alábbi lista a metódusdeklaráció elemeit határozza meg.

szolgáltatói

Egy adott szolgáltató csatolása az osztály leírásához. A Szolgáltató minősítő értéke a szolgáltató neve, amely jelzi a WMI-nek, hogy hol található a metódust támogató kód. A szolgáltatónak a Dynamic minősítővel kell megjelölnie minden olyan osztályt, amely dinamikus példányokkal rendelkezik. Ezzel szemben ne használja a Dinamikus minősítőt olyan osztály megjelöléséhez, amely statikus példányt és Implementált metódusokat tartalmaz.

Megvalósított

Kijelenti, hogy egy metódust fog implementálni ahelyett, hogy a metódus implementációját a szülőosztálytól örökli. A WMI alapértelmezés szerint egy származtatott osztályba propagálja a szülőosztály implementációját, hacsak a származtatott osztály nem biztosít implementációt. Ha kihagyja a Implementált minősítőt, az azt jelzi, hogy a metódusnak nincs implementációja ebben az osztályban. Ha egy metódust a Implementált minősítő nélkül újranyilvánít, a WMI továbbra is azt feltételezi, hogy nem fogja implementálni azt a metódust, és meghívja a szülőosztály metódusának implementálását, amikor meghívják. Ezért a metódusok származtatott osztályban való újbóli telepítése a Implementált minősítő csatolása nélkül csak akkor hasznos, ha hozzáad vagy eltávolít egy minősítőt a metódushoz vagy abból.

VisszatérésiTípus

A metódus által visszaadott értéket ismerteti. Egy metódus visszatérési értéke logikai, numerikus, CHAR, STRING, DATETIMEvagy sémaobjektum lehet. A visszatérési típust VOIDis deklarálhatja, ami azt jelzi, hogy a metódus nem ad vissza semmit. A tömbök azonban nem deklarálhatók visszatérési értéktípusként.

MethodName

Meghatározza a metódus nevét. Minden metódusnak egyedi névvel kell rendelkeznie. A WMI nem engedélyezi, hogy két azonos nevű és különböző aláírású metódus létezzon egy osztályban vagy egy osztályhierarchiában. Ezért nem lehet túlterhelni egy metódust.

Paraméterirány

Olyan minősítőket tartalmaz, amelyek azt írják le, hogy egy paraméter bemeneti paraméter, kimeneti paraméter vagy mindkettő. Ne használja ugyanazt a paraméternevet többször bemeneti paraméterként vagy többször kimeneti paraméterként. Ha ugyanaz a paraméternév jelenik meg a In és a Out minősítőkkel, a funkció lényegében megegyezik azzal, hogy a In, Out minősítőket egyetlen paraméteren használják. Külön deklarációk használatakor azonban a bemeneti és kimeneti paramétereknek minden más szempontból pontosan azonosnak kell lenniük, beleértve a azonosítók számát és típusát minősítők számát és típusát, és a minősítőnek mindkettő esetében azonosnak és explicit módon deklaráltnak kell lennie. Erősen ajánlott a In, Out minősítők használata egyetlen paraméterdeklaráción belül.

IDQualifier

A azonosítót minősítőt tartalmazza, amely egyedileg azonosítja az egyes paraméterek pozícióját a metódus paramétereinek sorozatán belül. Alapértelmezés szerint az MOF-fordító automatikusan megjelöli a paramétereket egy azonosítóval minősítővel. A fordító megjelöli az első paramétert 0 (nulla), a második paraméter értéke 1 (egy), és így tovább. Szükség esetén explicit módon megadhatja az azonosítósorozatot az MOF-kódban.

ParaméterTípus

Azt ismerteti, hogy a metódus milyen adattípust fogad el. Paramétertípust bármilyen MOF-adatértékként definiálhat, beleértve a tömböt, a sémaobjektumot vagy a hivatkozást is. Ha tömböt használ paraméterként, használja a tömböt kötetlenként vagy explicit méretként.

ParaméterNév

A paraméter nevét tartalmazza. Ezen a ponton megadhatja a paraméter alapértelmezett értékét is. A kezdeti értékeket nem tartalmazó paraméterek továbbra is hozzárendeletlenek maradnak.

Az alábbi példakód a paraméterek listáját és a minősítőket ismerteti.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] sint32 InParam);
    [Implemented] 
    void MyMethod2 ([in, id(0)] sint32 InParam, 
       [out, id(1)] sint32 OutParam);
    [Implemented] 
    sint32 MyMethod3 ([in, out, id(0)] sint32 InOutParam);
};

Az alábbi példakód bemutatja, hogyan használható tömb egy MOF-paraméterben.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskParam[]);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskParam[32]);
};

Az alábbi példakód egy sémaobjektum paraméterként és visszatérési értékként való használatát ismerteti.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk 
        DiskParam);
    [Implemented] 
    Win32_LogicalDisk MyMethod2 ([in, id(0)] string DiskVolLabel);
};

Az alábbi példakód két hivatkozást ír le: az egyiket a Win32_LogicalDisk osztály egy példányára, a másikat pedig egy ismeretlen objektumtípusú példányra.

[Dynamic, Provider("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk ref DiskRef);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] object ref AnyObject);
};

WMI-osztálymetódus létrehozása a C++ alkalmazásban

Az alábbi eljárás azt ismerteti, hogyan hozhat létre WMI-osztálymetódusokat programozott módon.

WMI-osztálymetódus létrehozása programozott módon

  1. Hozza létre azt az osztályt, amelyhez a metódus tartozik.

    A metódus létrehozása előtt rendelkeznie kell egy osztálysal a metódus elhelyezéséhez.

  2. A __PARAMETERS rendszerosztály két gyermekosztályának lekérése IWbemServices::GetObject vagy GetObjectAsynchasználatával.

    Az első gyermekosztály használatával írja le a bemenő paramétereket, a másodikat pedig a kimenő paraméterek leírására. Szükség esetén egyetlen lekérést hajthat végre, amelyet az IWbemClassObject::Clone metódus hívása követ.

  3. Adja meg a bemeneti paramétereket az első osztályba, a kimeneti paramétereket pedig a második osztályba egy vagy több IWbemClassObject::Puthívással.

    Amikor paramétereket ír le egy metódusra, tartsa be a következő szabályokat és korlátozásokat:

    • Az [in, out] paramétereket külön bejegyzésként, egyet a paramétereket tartalmazó objektumban, egyet pedig a kimenő paramétereket tartalmazó objektumban kell kezelni.

    • A [be- és kimenő] minősítőken kívül a többi minősítőnek pontosan azonosnak kell lennie.

    • Adja meg a azonosítót és a minősítőket, mindegyik paraméternél 0-tól (nulla) kezdve.

      A bemeneti vagy kimeneti paraméterek sorrendjét az egyes paraméterek azonosítójának minősítőjének értéke határozza meg. Minden bemeneti argumentumnak meg kell előznie a kimeneti argumentumokat. A metódusbemeneti és kimeneti paraméterek sorrendjének módosítása meglévő metódusszolgáltató frissítésekor a metódust meghívó alkalmazások sikertelenségéhez vezethet. Adjon hozzá új bemeneti paramétereket a meglévő paraméterek végén ahelyett, hogy beszúrja őket a már létrehozott sorrendbe.

      Ügyeljen arra, hogy ne maradjon rés a azonosító minősítő sorozatban.

    • Helyezze a visszatérési értéket a out-parameters osztályba egy ReturnValuenevű tulajdonságként.

      Ez azonosítja a tulajdonságot a metódus visszatérési értékeként. A tulajdonság CIM-típusa a metódus visszatérési típusa. Ha a metódus visszatérési típusa érvénytelen, akkor egyáltalán nincs ReturnValue tulajdonsága. Emellett a ReturnValue tulajdonság nem rendelkezhet azonosítóval minősítőt, mint a metódus argumentumai. Ha egy azonosító minősítőt rendel a ReturnValue tulajdonsághoz, egy WMI-hiba keletkezik.

    • Fejezze ki az osztály tulajdonságának alapértelmezett paraméterértékét.

  4. Helyezze mindkét __PARAMETERS objektumot a szülőosztályba az IWbemClassObject::P utMethodhívásával.

    Egyetlen hívás a PutMethod esetében mindkét __PARAMETERS objektumot elhelyezheti az osztályban.

Programozási osztály létrehozása