Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt een exemplaar in C++ maken via de interface IWbemServices.
Voor de codevoorbeelden in dit onderwerp is de volgende #include instructie vereist om correct te compileren.
#include <wbemidl.h>
In de volgende procedure wordt beschreven hoe u een exemplaar van een bestaande klasse maakt.
Een exemplaar van een bestaande klasse maken
Haal de definitie van de bestaande klasse op door de IWbemServices::GetObject- of IWbemServices::GetObjectAsync methoden aan te roepen.
In het volgende codevoorbeeld ziet u hoe u de GetObject- en GetObjectAsync- methoden gebruikt om een aanwijzer op te halen naar de IWbemClassObject-interface die toegang biedt tot de klassedefinitie.
// The pSv variable is of type IWbemServices * IWbemClassObject *pNewInstance = 0; IWbemClassObject *pExampleClass = 0; IWbemContext *pCtx = 0; IWbemCallResult *pResult = 0; BSTR PathToClass = SysAllocString(L"Example"); HRESULT hRes = pSvc->GetObject(PathToClass, 0, pCtx, &pExampleClass, &pResult); SysFreeString(PathToClass);Roep de methode IWbemClassObject::SpawnInstance aan om het nieuwe exemplaar te maken.
In het volgende codevoorbeeld ziet u hoe u een nieuw exemplaar maakt en vervolgens de klasse vrijgeeft.
pExampleClass->SpawnInstance(0, &pNewInstance); pExampleClass->Release(); // Don't need the class any moreStel waarden in voor eigenschappen die niet de waarden overnemen die voor de klasse zijn gedefinieerd door de methode IWbemClassObject::P ut aan te roepen.
Elk exemplaar van een klasse neemt alle eigenschappen over die zijn gedefinieerd voor de klasse. U kunt echter verschillende eigenschapswaarden opgeven als u kiest.
Als de bestaande klasse een sleuteleigenschap heeft, moet u de eigenschap instellen op NULL- of een gegarandeerde unieke waarde. Als u de sleutel instelt op NULL- en de sleutel een tekenreeks is, PutInstanceAsync- of PutInstance intern een GUID aan de sleutel genereert en toewijst. Als u op deze manier NULL- opgeeft voor een sleuteleigenschap, kunt u een uniek exemplaar maken dat geen eerdere exemplaren overschrijft.
In het volgende codevoorbeeld ziet u hoe u de eigenschapswaarde Index van de voorbeeldexemplarenklasse instelt.
VARIANT v; VariantInit(&v); V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocString(L"IX100"); BSTR KeyProp = SysAllocString(L"Index"); pNewInstance->Put(KeyProp, 0, &v, 0); SysFreeString(KeyProp); VariantClear(&v);Stel de waarden voor relevante kwalificaties in via een aanroep naar IWbemClassObject::GetQualifierSet.
De methode GetQualifierSet retourneert een aanwijzer naar een IWbemQualifierSet interface, die wordt gebruikt om toegang te krijgen tot de kwalificatie voor een klasse of instantie. U kunt verschillende waarden opgeven voor een kwalificatie die bij de klasse is gedefinieerd, wanneer de klassekwalificatiesmaak EnableOverrideis. U kunt een klassekwalificatie waarvan de flavor is ingesteld op DisableOverrideniet wijzigen of verwijderen. Zie Qualifier Flavorsvoor meer informatie.
Als optie kunt u ook aanvullende kwalificaties voor uw exemplaarklasse definiëren. U kunt aanvullende kwalificaties definiëren voor de instantie- of instantie-eigenschap die niet hoeft te worden weergegeven in de klassedeclaratie.
Sla het exemplaar op door de methode IWbemServices::PutInstance of IWbemServices::PutInstanceAsync aan te roepen.
WMI slaat het exemplaar op in de huidige WMI-naamruimte. Als zodanig is het volledige pad van het exemplaar afhankelijk van de naamruimte, die doorgaans root\default is. Voor dit codevoorbeeld is de volledige padnaam \\.\root\default:Example.Index="IX100".
In het volgende codevoorbeeld wordt getoond hoe u een instantie opslaat.
hRes = pSvc->PutInstance(pNewInstance, 0, pCtx, &pResult); pNewInstance->Release();
Het opslaan van het exemplaar in WMI legt verschillende eigenschappen van het exemplaar vast.
U kunt met name geen van de volgende bewerkingen uitvoeren via de WMI-API nadat een exemplaar in de WMI-infrastructuur bestaat:
- Wijzig de bovenliggende klasse van de klasse waartoe het exemplaar behoort.
- Eigenschappen toevoegen of verwijderen.
- Wijzig eigenschappentypen.
- Voeg key of geïndexeerde kwalificaties toe of verwijder deze.
- Toevoegen of verwijderen van Singleton, Dynamic, of Abstract kwalificaties.
In het volgende codevoorbeeld worden de codevoorbeelden gecombineerd die in de vorige procedure zijn besproken om te laten zien hoe u een exemplaar maakt met behulp van de WMI-API.
void CreateInstance (IWbemServices *pSvc)
{
IWbemClassObject *pNewInstance = 0;
IWbemClassObject *pExampleClass = 0;
IWbemContext *pCtx = 0;
IWbemCallResult *pResult = 0;
// Get the class definition.
BSTR PathToClass = SysAllocString(L"Example");
HRESULT hRes = pSvc->GetObject(PathToClass, 0, pCtx,
&pExampleClass, &pResult);
SysFreeString(PathToClass);
if (hRes != 0)
return;
// Create a new instance.
pExampleClass->SpawnInstance(0, &pNewInstance);
pExampleClass->Release(); // Don't need the class any more
VARIANT v;
VariantInit(&v);
// Set the Index property (the key).
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocString(L"IX100");
BSTR KeyProp = SysAllocString(L"Index");
pNewInstance->Put(KeyProp, 0, &v, 0);
SysFreeString(KeyProp);
VariantClear(&v);
// Set the IntVal property.
V_VT(&v) = VT_I4;
V_I4(&v) = 1001;
BSTR Prop = SysAllocString(L"IntVal");
pNewInstance->Put(Prop, 0, &v, 0);
SysFreeString(Prop);
VariantClear(&v);
// Other properties acquire the 'default' value specified
// in the class definition unless otherwise modified here.
// Write the instance to WMI.
hRes = pSvc->PutInstance(pNewInstance, 0, pCtx, &pResult);
pNewInstance->Release();
}