Здравствуйте, DigY, Вы писали:
[skip]
можно использовать COM API, Scripting API
в PSDK есть примеры на С++ и VB(VBScript)
обработки ошибок нет.
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
IWbemLocator* pLoc = NULL;
hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);
IWbemServices *pSvc = NULL;
BSTR bstrkResource = SysAllocString(L"\\\\.\\root\\cimv2");
hr = pLoc->ConnectServer(bstResource, NULL, NULL, 0, NULL, 0,0,&pSvc);
SysFreeString(bstrResource);
hr = CoSetProxyBlanket(pSvc,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE
);
BSTR bstrClassName = SysAllocString(L"Win32_PhysicalMemory");
IEnumWbemClassObject* pEnumObjects = NULL;
hr = pSvc->CreateInstanceEnum(bstrClassName, 0, NULL, &pEnumObjects);
if(SUCCEEDED(hr))
{
ULONG uReturned = 1;
while(uReturned == 1)
{
IWbemClassObject* pObject = NULL;
hr = pEnumObjects->Next(2000, 1, &pObject, &uReturned);
if(SUCCEEDED(hr) && (uReturned == 1))
{
VARIANT pVal;
BSTR bstrName = SysAllocString(L"MemoryType");
hr = pObject->Get(bstrName, 0L, &pVal, NULL, NULL);
SysFreeString(bstrName);
if(SUCCEEDED(hr) && (pVal.vt != VT_NULL))
{
VARIANT pStatus;
VariantInit(&pStatus);
VariantChangeType(&pStatus, &pVal, 0,VT_UINT);
std::cout << pStatus.uintVal << std::endl;
VariantClear(&pStatus);
VariantClear(&pVal);
}
pObject->Release();
}
}
}
pEnumObjects->Release();
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 0;
}
... << RSDN@Home 1.0 beta 2 >>