Есть такой код:
| Код | CoInitialize (NULL); CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0); HRESULT hr = 0; IWbemLocator *pWbemLocator = NULL; if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**) &pWbemLocator))) { IWbemServices *pServices = NULL; if(SUCCEEDED(hr = pWbemLocator->ConnectServer(_bstr_t(L"root\\cimv2"), NULL, NULL, NULL, 0, NULL, NULL, &pServices))) { IEnumWbemClassObject * pEnum = NULL; hr = pServices->CreateInstanceEnum(_bstr_t(L"Win32_CDROMDrive"), 0, NULL, &pEnum); if(pEnum) { ULONG uReturned = 1; while(uReturned == 1) { IWbemClassObject * pClassObject = NULL; hr = pEnum->Next(7000, 1, &pClassObject, &uReturned); if (SUCCEEDED(hr) && (uReturned == 1)) { // получаем текстовое значение "Caption" VARIANT v; VariantInit(&v); CIMTYPE vtType = CIM_STRING; LONG lFlavor = 0L; pClassObject->Get (L"Caption", 0, &v, &vtType, &lFlavor); if(v.vt == VT_BSTR) { WCHAR buf[1024] = L""; DWORD dwLen = *((DWORD*)v.bstrVal - 1)/sizeof(WCHAR); wcsncpy(buf, v.bstrVal, dwLen); *(buf + dwLen) = L'\0'; ::MessageBoxW (0, buf, L"", MB_OK); }
// получаем числовое значение "FileSystemFlagsEx" VariantClear(&v); VariantInit(&v); vtType = CIM_SINT32; pClassObject->Get(L"FileSystemFlagsEx", 0, &v, &vtType, &lFlavor); if(v.vt == VT_UINT) { CString res = ""; res.Format("%u", v.ullVal); MessageBox(res, "", MB_OK); } VariantClear(&v); pClassObject->Release (); } }//end while
pEnum->Release (); } pServices->Release (); } pWbemLocator->Release (); } CoUninitialize ();
|
Для текстовых значений все нормально, а числовые не могу получить. Помогите кто разобрался с этим, запарился уже. |