Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
IWbemServices arabirimi aracılığıyla C++ dilinde bir örnek oluşturabilirsiniz.
Bu konudaki kod örnekleri, doğru derlenmesi için aşağıdaki #include deyimini gerektirir.
#include <wbemidl.h>
Aşağıdaki yordamda mevcut bir sınıfın örneğinin nasıl oluşturulacağı açıklanmaktadır.
Var olan bir sınıf örneğini oluşturmak için
IWbemServices::GetObjectveya IWbemServices::GetObjectAsync yöntemlerini çağırarak mevcut sınıfın tanımını alın.
Aşağıdaki kod örneği, sınıf tanımına erişim sağlayan IWbemClassObject arabirimine işaretçi almak için GetObject ve GetObjectAsync yöntemlerinin nasıl kullanılacağını gösterir.
// 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);IWbemClassObject::SpawnInstance yöntemini çağırarak yeni örneği oluşturun.
Aşağıdaki kod örneği, yeni bir örneğin nasıl oluşturulacağını ve ardından sınıfın nasıl serbest bırakacağını gösterir.
pExampleClass->SpawnInstance(0, &pNewInstance); pExampleClass->Release(); // Don't need the class any moreIWbemClassObject::P ut yöntemini çağırarak sınıf için tanımlanan değerleri devralmayan özelliklerin değerlerini ayarlayın.
Bir sınıfın her örneği, sınıf için tanımlanan tüm özellikleri devralır. Ancak, isterseniz farklı özellik değerleri belirtebilirsiniz.
Mevcut sınıfın anahtar özelliği varsa, özelliğini NULL veya garantili benzersiz bir değer olarak ayarlamanız gerekir. Anahtarı NULL olarak ayarlarsanız ve anahtar bir dizeyse, PutInstanceAsync veya PutInstance dahili olarak bir GUID oluşturur ve anahtara atar. Bu şekilde, bir anahtar özelliği için NULL belirterek önceki hiçbir örneğin üzerine yazmayacak benzersiz bir örnek oluşturabilirsiniz.
Aşağıdaki kod örneğinde, örnek örnek sınıfının Index özellik değerinin nasıl ayarlanacağı gösterilmektedir.
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);IWbemClassObject::GetQualifierSetçağrısı aracılığıyla ilgili niteleyicilerin değerlerini ayarlayın.
GetQualifierSet yöntemi, bir sınıf veya örneğin niteleyicilerine erişmek için kullanılan IWbemQualifierSet arabirimine bir işaretçi döndürür. Sınıf niteleyicisi EnableOverrideise sınıf için tanımlanan bir niteleyici için farklı değerler belirtebilirsiniz. DisableOverrideolarak ayarlanmış bir sınıf niteleyicisini değiştiremez veya silemezsiniz. Daha fazla bilgi için bkz. Niteleyici Tatlar.
Seçenek olarak, örnek sınıfınız için ek niteleyiciler de tanımlayabilirsiniz. Örnek veya örnek özelliği için sınıf bildiriminde görünmesi gerekmeyen ek niteleyiciler tanımlayabilirsiniz.
IWbemServices::P utInstance veya IWbemServices::P utInstanceAsync yöntemini çağırarak örneği kaydedin.
WMI, örneği geçerli WMI ad alanına kaydeder. Bu nedenle, bir örneğin tam yolu, genellikle root\default olan ad alanına bağlıdır. Bu kod örneği için tam yol adı \\ olacaktır.\root\default:Example.Index="IX100".
Aşağıdaki kod örneğinde bir örneğin nasıl kaydedilecekleri gösterilmektedir.
hRes = pSvc->PutInstance(pNewInstance, 0, pCtx, &pResult); pNewInstance->Release();
Örneği WMI'ye kaydetmek, örneğin birkaç özelliğini kilitler.
Özellikle, WMI altyapısında bir örnek mevcut olduktan sonra WMI API'sini kullanarak aşağıdaki işlemlerden hiçbirini gerçekleştiremezsiniz:
- Örneğin ait olduğu sınıfın üst sınıfını değiştirin.
- Özellikleri ekleyin veya kaldırın.
- Özellik türlerini değiştirme.
- Anahtar veya Dizinli niteleyicilerini kaldırın veya ekleyin.
- Singleton, Dinamikveya Soyut niteleyicilerini ekleyin veya kaldırın.
Aşağıdaki kod örneği, WMI API'sini kullanarak bir örneğin nasıl oluşturulacağını göstermek için önceki yordamda açıklanan kod örneklerini birleştirir.
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();
}