Re[3]: Как определить тип DIMM?
От: Phazz Россия  
Дата: 09.12.02 21:16
Оценка:
Здравствуйте, 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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.