Dela via


Skapa en WMI-metod

Om du vill skapa en WMI-metod definierar du indata- och utdataparametrarna för metoden. Indata- och utdataparametrarna representeras av en särskild WMI-systemklass __PARAMETERS. Mer information finns i Anropa en metod och Skriva en metodleverantör.

Följande avsnitt beskrivs i det här avsnittet:

Skapa en WMI-klassmetod i MOF

I WMI är providermetoder vanligtvis distinkta åtgärder relaterade till objektet som klassen representerar. I stället för att ändra värdet för en egenskap för att köra en åtgärd bör en metod skapas. Du kan till exempel aktivera eller inaktivera ett nätverksinformationscenter (NIC) som representeras av Win32_NetworkAdapter med hjälp av metoderna Aktivera och Inaktivera. Även om dessa åtgärder kan representeras som en läs-/skrivegenskap är den rekommenderade designen att skapa en metod. Om du vill göra ett tillstånd eller ett värde synligt för klassen är den rekommenderade metoden att skapa en läs-/skrivegenskap i stället för en metod. I Win32_NetworkAdaptervisar egenskapen NetEnabled kortets tillstånd, men ändringar mellan tillstånd utförs av metoderna Aktivera eller Inaktivera.

Klassdeklarationer kan innehålla deklaration av en eller flera metoder. Du kan antingen välja att ärva metoderna för en överordnad klass eller implementera dina egna. Om du väljer att implementera dina egna metoder måste du deklarera metoden och markera metoden med specifika kvalificerartaggar.

Följande procedur beskriver hur du deklarerar en metod i en klass som inte ärver från en basklass.

Deklarera en metod

  1. Definiera namnet på din metod mellan klammerparenteserna för en klassdeklaration följt av eventuella kvalificerare.

    I följande kodexempel beskrivs syntaxen för en metod.

    [Dynamic, Provider ("ProviderName")]
    class ClassName
    {
        [Implemented] <ReturnType> <MethodName>
            ([ParameterDirection, IDQualifier] 
            <ParameterType> <ParameterName>);
    };
    
  2. När du är klar infogar du MOF-koden (Managed Object Format) i WMI-lagringsplatsen med ett anrop till MOF-kompilatorn.

    Mer information finns i Kompilera MOF-filer.

I följande lista definieras elementen i metoddeklarationen.

Leverantör

Länkar en specifik provider till din klassbeskrivning. Värdet för Provider-kvalificeraren är namnet på providern, som talar om för WMI var koden som stöder din metod finns. En tjänsteleverantör bör också markera med Dynamisk kvalificeringen av alla klasser som har dynamiska instanser. Använd däremot inte Dynamisk-kvalificerare för att markera en klass som innehåller en statisk instans med implementerade metoder.

implementerad

Deklarerar att du implementerar en metod i stället för att ärva metodimplementeringen från den överordnade klassen. Som standard sprider WMI implementeringen av den överordnade klassen till en härledd klass om inte den härledda klassen tillhandahåller en implementering. Om du utelämnar kvalificeraren Implementerad, innebär det att metoden inte har någon implementation i den klassen. Om du omdeklarerar en metod utan Implementerad-kvalificerare förutsätter WMI fortfarande att du inte kommer att implementera den metoden och anropar implementeringen av den överordnade klassmetoden när den anropas. Därför är det att återdeklarera en metod i en härledd klass utan att avsluta med kvalificeraren Implementerad användbart endast när du lägger till eller tar bort en kvalificerare från metoden.

Returtyp

Beskriver vilket värde metoden returnerar. Returvärdet för en metod måste vara ett booleskt, numeriskt CHAR-, STRING, DATETIMEeller schemaobjekt. Du kan också deklarera returtypen som VOID, vilket indikerar att metoden inte returnerar någonting. Du kan dock inte deklarera en matris som en returvärdetyp.

MethodName

Definierar namnet på metoden. Varje metod måste ha ett unikt namn. WMI tillåter inte att två metoder med samma namn och olika signaturer finns i en klass eller i en klasshierarki. Därför kan du inte heller överbelasta en metod.

ParameterRiktning

Innehåller kvalificerare som beskriver om en parameter är en indataparameter, utdataparameter eller båda. Använd inte samma parameternamn mer än en gång som en indataparameter eller mer än en gång som en utdataparameter. Om samma parameternamn visas med både In och en Out-kvalificerare, är funktionen konceptuellt densamma som att använda I, Out-kvalificerare på en enda parameter. När du använder separata deklarationer måste dock indata- och utdataparametrarna vara exakt desamma i alla andra avseenden, inklusive antalet och typen av ID kvalificerare, och kvalificeringen måste vara densamma och uttryckligen deklarerad för båda. Vi rekommenderar starkt att du använder In, Out-kvalificerare i en enda parameterdeklaration.

IDQualifier

Det innehåller kvalifikatorn ID som unikt identifierar positionen för varje parameter i parametersekvensen i metoden. Som standard markerar MOF-kompilatorn automatiskt parametrar med en ID-kvalificerare. Kompilatorn markerar den första parametern med värdet 0 (noll), den andra parametern ett värde på 1 (en) och så vidare. Om det behövs kan du uttryckligen ange ID-sekvensen i din MOF-kod.

Parametertyp

Beskriver vilken datatyp metoden kan acceptera. Du kan definiera en parametertyp som valfritt MOF-datavärde, inklusive en matris, ett schemaobjekt eller en referens. När du använder en matris som en parameter, använd matrisen som obunden eller med en explicit storlek.

ParameterName

Innehåller namnet på parametern. Du kan också välja att definiera standardvärdet för parametern just nu. Parametrar som saknar initiala värden förblir otilldelade.

I följande kodexempel beskrivs parameterlistning och kvalificerare.

[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);
};

I följande kodexempel beskrivs hur du använder en matris i en MOF-parameter.

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

I följande kodexempel beskrivs användning av ett schemaobjekt som både en parameter och ett returvärde.

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

I följande kodexempel beskrivs hur du inkluderar två referenser: en till en instans av klassen Win32_LogicalDisk och den andra till en instans av en okänd objekttyp.

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

Skapa en WMI-klassmetod i C++

Följande procedur beskriver hur du skapar en WMI-klassmetod programmatiskt.

Om du vill skapa en WMI-klassmetod programmatiskt

  1. Skapa klassen som metoden ska tillhöra.

    Du måste först ha en klass för att placera metoden i innan du skapar metoden.

  2. Hämta två subklasser av __PARAMETERS-systemklassen med antingen IWbemServices::GetObject eller GetObjectAsync.

    Använd den första underordnade klassen för att beskriva parametrarna och den andra för att beskriva utparametrarna. Om det behövs kan du utföra en enda hämtning följt av ett anrop till metoden IWbemClassObject::Clone.

  3. Skriv in-parametrarna till den första klassen och ut-parametrarna till den andra klassen med hjälp av ett eller flera anrop till IWbemClassObject::Put.

    När du beskriver parametrar för en metod bör du följa följande regler och begränsningar:

    • Behandla parametrarna [in, ut] som separata poster, en i objektet som innehåller parametrarna och en i objektet som innehåller utparametrarna.

    • Förutom [in, ut] kval måste de återstående kvalen vara exakt desamma.

    • Ange ID kvalificerare, med början från 0 (noll), en för varje parameter.

      Ordningen på indata- eller utdataparametrarna fastställs av värdet för ID-kvalificerare för varje parameter. Alla indataargument måste föregå alla utdataargument. Om du ändrar ordningen på metodindata- och utdataparametrar när du uppdaterar en befintlig metodprovider kan det leda till att program som anropar metoden misslyckas. Lägg till nya indataparametrar i slutet av de befintliga parametrarna i stället för att infoga dem i den sekvens som redan har upprättats.

      Se till att inte lämna några luckor i -ID:t kvalificeringssekvens.

    • Placera returvärdet i klassen out-parameters som en egenskap med namnet ReturnValue.

      Detta identifierar egenskapen som returvärdet för metoden. CIM-typen för den här egenskapen är metodens returtyp. Om metoden har en returtyp av void har du inte någon ReturnValue- egenskap alls. Egenskapen ReturnValue kan inte ha en kvalificerare som -ID, till skillnad från metodens argument. Om du tilldelar ID kvalificerare till egenskapen ReturnValue uppstår ett WMI-fel.

    • Uttryck eventuella standardparametervärden för egenskapen i klassen.

  4. Placera båda __PARAMETERS objekten i den överordnade klassen med ett anrop till IWbemClassObject::PutMethod.

    Ett enda anrop till PutMethod kan placera båda __PARAMETERS objekt i klassen.

Skapa en klass