Een WMI-methode maken
Als u een WMI-methode wilt maken, definieert u de invoer- en uitvoerparameters voor de methode. De invoer- en uitvoerparameters worden vertegenwoordigd door een speciale WMI-systeemklasse __PARAMETERS. Voor meer informatie, zie Een Methode Aanroepen en Een Methodeprovider Schrijven.
In dit onderwerp worden de volgende secties besproken:
Een WMI-klassemethode maken in MOF
In WMI zijn providermethoden over het algemeen afzonderlijke acties met betrekking tot het object dat de klasse vertegenwoordigt. In plaats van de waarde van een eigenschap te wijzigen om een actie uit te voeren, moet er een methode worden gemaakt. U kunt bijvoorbeeld een netwerkinformatiecentrum (NIC) in- of uitschakelen dat wordt vertegenwoordigd door Win32_NetworkAdapter met behulp van de methoden Inschakelen en uitschakelen. Hoewel deze acties kunnen worden weergegeven als een eigenschap lezen/schrijven, is het aanbevolen ontwerp om een methode te maken. Als u een status of waarde zichtbaar wilt maken voor de klasse, kunt u ook een lees-/schrijfeigenschap maken in plaats van een methode. In Win32_NetworkAdaptermaakt de eigenschap NetEnabled de status van de adapter zichtbaar, maar wijzigingen tussen statussen worden uitgevoerd door de inschakelen of -methoden uitschakelen.
Klassedeclaraties kunnen de declaratie van een of meer methoden bevatten. U kunt ervoor kiezen om de methoden van een bovenliggende klasse over te nemen of uw eigen methoden te implementeren. Als u ervoor kiest om uw eigen methoden te implementeren, moet u de methode declareren en de methode markeren met specifieke kwalificatietags.
In de volgende procedure wordt beschreven hoe u een methode declareert in een klasse die niet wordt overgenomen van een basisklasse.
Een methode declareren
Definieer de naam van uw methode tussen de accolades van een class definitie, gevolgd door eventuele kwalificaties.
In het volgende codevoorbeeld wordt de syntaxis voor een methode beschreven.
[Dynamic, Provider ("ProviderName")] class ClassName { [Implemented] <ReturnType> <MethodName> ([ParameterDirection, IDQualifier] <ParameterType> <ParameterName>); };
Wanneer u klaar bent, voegt u de MOF-code (Managed Object Format) in de WMI-opslagplaats in met een aanroep naar de MOF-compiler.
Zie MOF-bestanden compilerenvoor meer informatie.
De volgende lijst definieert de elementen van de methodedeclaratie.
-
Hiermee koppelt u een specifieke provider aan uw klassebeschrijving. De waarde van de Provider kwalificatie is de naam van de provider, waarmee WMI wordt aangegeven waar de code die uw methode ondersteunt zich bevindt. Een provider moet ook de Dynamic kwalificatie markeren bij elke klasse met dynamische exemplaren. Gebruik daarentegen niet de Dynamische kwalificatie om een klasse te markeren die een statisch exemplaar bevat met Geïmplementeerde methoden.
-
geïmplementeerd
-
Declareert dat u een methode gaat implementeren in plaats van de implementatie van de methode over te nemen van de bovenliggende klasse. Standaard geeft WMI de implementatie van de bovenliggende klasse door aan een afgeleide klasse, tenzij de afgeleide klasse een implementatie biedt. Als u de Geïmplementeerde kwalificatie weglaat, wordt aangegeven dat de methode geen implementatie in die klasse heeft. Als u een methode opnieuw declareert zonder de Geïmplementeerd kwalificatie, gaat WMI er nog steeds van uit dat u deze methode niet gaat implementeren en de implementatie van de bovenliggende klassemethode aanroept wanneer deze wordt aangeroepen. Als zodanig is het opnieuw declareren van een methode in een afgeleide klasse zonder de Geïmplementeerde kwalificatie alleen nuttig wanneer u een kwalificatie toevoegt aan of verwijdert uit de methode.
-
ReturnType
-
Beschrijft welke waarde de methode retourneert. De retourwaarde voor een methode moet een Booleaanse waarde, numeriek, TEKEN, TEKENREEKS, DATETIME-of schemaobject zijn. U kunt ook het retourtype declareren als VOID, waarmee wordt aangegeven dat de methode niets retourneert. U kunt een matrix echter niet declareren als retourwaardetype.
-
MethodName
-
Hiermee definieert u de naam van de methode. Elke methode moet een unieke naam hebben. WMI staat twee methoden met dezelfde naam en verschillende handtekeningen niet toe in één klasse of binnen een klassehiërarchie. Als zodanig kunt u een methode ook niet overbelasten.
-
ParameterDirection
-
Bevat kwalificaties die beschrijven of een parameter een invoerparameter, uitvoerparameter of beide is. Gebruik niet dezelfde parameternaam meer dan één keer als een invoerparameter of meer dan één keer als een uitvoerparameter. Als dezelfde parameternaam wordt weergegeven met zowel de In als een Out- kwalificatie, is de functionaliteit conceptueel hetzelfde als het gebruik van de In, Out kwalificatie voor één parameter. Wanneer u echter afzonderlijke declaraties gebruikt, moeten de invoer- en uitvoerparameters in alle andere opzichten exact hetzelfde zijn, met inbegrip van het aantal en het type id kwalificatie en moet de kwalificatie hetzelfde zijn en expliciet voor beide zijn gedeclareerd. Het wordt sterk aanbevolen om binnen één parameterdeclaratie de kwalificaties In, Out te gebruiken.
-
IDQualifier
-
Bevat de -id kwalificatie die de positie van elke parameter uniek identificeert binnen de reeks parameters in de methode. De MOF-compiler markeert standaard automatisch parameters met een -id kwalificatie. De compiler markeert de eerste parameter met de waarde 0 (nul), de tweede parameter een waarde van 1 (één), enzovoort. Indien nodig kunt u de id-reeks expliciet in uw MOF-code vermelden.
-
parametertype
-
Beschrijft welk gegevenstype de methode kan accepteren. U kunt een parametertype definiëren als een MOF-gegevenswaarde, inclusief een matrix, schemaobject of verwijzing. Wanneer u een matrix als parameter gebruikt, gebruikt u de matrix als niet-afhankelijk of met een expliciete grootte.
-
parameternaam
-
Bevat de naam van de parameter. U kunt er ook voor kiezen om op dit moment de standaardwaarde van de parameter te definiëren. Parameters die geen initiële waarden bevatten, blijven niet toegewezen.
In het volgende codevoorbeeld worden de parameters en kwalificaties beschreven.
[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);
};
In het volgende codevoorbeeld wordt beschreven hoe u een matrix gebruikt in een 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]);
};
In het volgende codevoorbeeld wordt beschreven hoe u een schemaobject gebruikt als zowel een parameter als een retourwaarde.
[Dynamic, Provider ("ProviderX")]
class MyClass
{
[Implemented] sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk
DiskParam);
[Implemented]
Win32_LogicalDisk MyMethod2 ([in, id(0)] string DiskVolLabel);
};
In het volgende codevoorbeeld wordt beschreven hoe u twee verwijzingen opneemt: één naar een exemplaar van de Win32_LogicalDisk-klasse en de andere naar een exemplaar van een onbekend objecttype.
[Dynamic, Provider("ProviderX")]
class MyClass
{
[Implemented]
sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk ref DiskRef);
[Implemented]
sint32 MyMethod2 ([in, id(0)] object ref AnyObject);
};
Een WMI-klassemethode maken in C++
In de volgende procedure wordt beschreven hoe u programmatisch een WMI-klassemethode maakt.
Programmatisch een WMI-klassemethode maken
Maak de klasse waartoe de methode behoort.
U moet eerst een klasse hebben om de methode in te plaatsen voordat u de methode maakt.
Haal twee onderliggende klassen van de systeemklasse __PARAMETERS op, gebruikmakend van IWbemServices::GetObject of GetObjectAsync.
Gebruik de eerste onderliggende klasse om de in-parameters te beschrijven en de tweede om de out-parameters te beschrijven. Indien nodig kunt u een enkele ophaalactie uitvoeren, gevolgd door een aanroep naar de methode IWbemClassObject::Clone.
Schrijf de in-parameters naar de eerste klasse en de out-parameters naar de tweede klasse door middel van een of meerdere oproepen naar IWbemClassObject::Put.
Wanneer u parameters voor een methode beschrijft, moet u de volgende regels en beperkingen observeren:
Behandel de parameters [in, out] als afzonderlijke vermeldingen, een in het object dat de in-parameters bevat en een in het object dat de out-parameters bevat.
Behalve de [in, uit] kwalificaties moeten de resterende kwalificaties precies hetzelfde zijn.
Geef de ID-kwalificatoren op, beginnend bij 0 (nul), één voor elke parameter.
De volgorde van de invoer- of uitvoerparameters wordt bepaald door de waarde van de -id kwalificatie voor elke parameter. Alle invoerargumenten moeten voorafgaan aan alle uitvoerargumenten. Als u de volgorde van de invoer- en uitvoerparameters van de methode wijzigt bij het bijwerken van een bestaande methodeprovider, kan dit ertoe leiden dat toepassingen die de methode aanroepen, mislukken. Voeg nieuwe invoerparameters toe aan het einde van de bestaande parameters in plaats van deze in te voegen in de volgorde die al is ingesteld.
Zorg ervoor dat u geen hiaten in de id kwalificatiereeks laat staan.
Plaats de retourwaarde in de klasse out-parameters als een eigenschap met de naam ReturnValue.
Hiermee wordt de eigenschap geïdentificeerd als de retourwaarde van de methode. Het CIM-type van deze eigenschap is het retourtype van de methode. Als de methode een retourtype void heeft, dan moet u geen ReturnValue-eigenschap hebben. De eigenschap ReturnValue kan geen ID kwalificatie hebben zoals de argumenten van de methode. Het toewijzen van een ID kwalificatie aan de eigenschap ReturnValue veroorzaakt een WMI fout.
Express alle standaardparameterwaarden voor de eigenschap in de klasse.
Plaats beide __PARAMETERS objecten in de bovenliggende klasse met een aanroep naar IWbemClassObject::PutMethod.
Eén aanroep van PutMethod- kan beide __PARAMETERS objecten in de klasse plaatsen.
Verwante onderwerpen