2025-04-27 07:49:33 -04:00

129 lines
3.0 KiB
C++

//***************************************************************************
//
// UTILS.CPP
//
// Module: WINMGMT class provider sample code
//
// Purpose: General purpose utilities.
//
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//
//***************************************************************************
#include <objbase.h>
#include "sample.h"
//***************************************************************************
//
// CreateInst
//
// Purpose: Creates a new instance and sets
// the inital values of the properties.
//
// Return: S_OK if all is well, otherwise an error code is returned
//
//***************************************************************************
SCODE CreateInst(IWbemServices * pNamespace, LPWSTR pKey, long lVal,
IWbemClassObject ** pNewInst,
WCHAR * pwcClassName,
IWbemContext *pCtx)
{
SCODE sc;
IWbemClassObject * pClass = NULL;
sc = pNamespace->GetObject(pwcClassName, 0, pCtx, &pClass, NULL);
if(sc != S_OK)
return WBEM_E_FAILED;
sc = pClass->SpawnInstance(0, pNewInst);
pClass->Release();
if(FAILED(sc))
return sc;
VARIANT v;
// Set the key property value.
v.vt = VT_BSTR;
v.bstrVal = SysAllocString(pKey);
sc = (*pNewInst)->Put(L"MyKey", 0, &v, 0);
VariantClear(&v);
// Set the number property value.
v.vt = VT_I4;
v.lVal = lVal;
sc = (*pNewInst)->Put(L"MyValue", 0, &v, 0);
return sc;
}
SCODE CreateClass( IWbemServices * pNamespace, IWbemClassObject ** pNewClass,
WCHAR * pwcClassName,
IWbemContext *pCtx)
{
SCODE sc;
sc = pNamespace->GetObject(NULL, 0, pCtx, pNewClass, NULL);
if(sc != S_OK)
return sc;
VARIANT v;
// Set the class name.
v.vt = VT_BSTR;
v.bstrVal = SysAllocString(pwcClassName);
sc = (*pNewClass)->Put(L"__class", 0, &v, 0);
VariantClear(&v);
// Set the key property value.
v.vt = VT_NULL;
sc = (*pNewClass)->Put(L"MyKey", 0, &v, CIM_STRING);
// Set the number property value.
sc = (*pNewClass)->Put(L"MyValue", 0, &v, CIM_SINT32);
// Set the key qualifier
IWbemQualifierSet* pQualSet = NULL;
sc = (*pNewClass)->GetPropertyQualifierSet(L"MyKey", &pQualSet);
if(pQualSet)
{
v.vt = VT_BOOL;
v.boolVal = VARIANT_TRUE;
sc = pQualSet->Put(L"Key", &v, 0);
pQualSet->Release();
}
// Set the dynamic qualifier
sc = (*pNewClass)->GetQualifierSet(&pQualSet);
if(pQualSet)
{
v.vt = VT_BOOL;
v.boolVal = VARIANT_TRUE;
sc = pQualSet->Put(L"Dynamic", &v, 0);
v.vt = VT_BSTR;
v.bstrVal = SysAllocString(L"ClassProvSamp");
sc = pQualSet->Put(L"Provider", &v, 0);
VariantClear(&v);
pQualSet->Release();
}
return sc;
}