c++通過wmi獲得Win32_DiskDrive裡面的CapabilityDescriptions等引數
阿新 • • 發佈:2018-11-21
//查詢硬碟
//char b[]=“Here is the DiskDrive information:”;
char b[]=“硬碟的資訊如下:”;
printf("\n\n %s",b); pEnumerator->Release(); pEnumerator=NULL; hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_DiskDrive where SCSILogicalUnit = 0"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL,&pEnumerator); //查詢有效的電池資訊 if (FAILED(hres)) { cout << ";;Query failed. "<< "Error code = 0x" << hex << hres << endl; pSvc->Release(); pLoc->Release(); CoUninitialize(); return 1; // Program has failed.查詢失敗 } while (pEnumerator) { hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); //Next函式 if((0 == uReturn)||(0 == pclsObj)) // if(0 == uReturn) { break; } //獲取欄位的值 VARIANT DisID; VARIANT DisDp; VARIANT DisCap; VARIANT DisMo; VARIANT DisMan; VARIANT DisSN; VARIANT DisD; VARIANT DisCD; VARIANT DisMBS; VARIANT DisMiBS; VARIANT DisSPT; VARIANT DisTC; VARIANT DisTH; VARIANT DisTS; VARIANT DisTT; VARIANT DisTPC; VARIANT DisFR; VARIANT DisIT; VARIANT Disize; //DisCD.bstrVal=0; DisD.bstrVal=0; DisID.bstrVal=0; DisMBS.bstrVal=0; DisMiBS.bstrVal=0; DisSPT.bstrVal=0; DisTC.bstrVal=0; DisTH.bstrVal=0; DisTS.bstrVal=0; pclsObj->Get(L"DeviceID",0,&DisID,0,0); printf("\n DeviceID:%ls",DisID.bstrVal); // 裝置名稱 string,值為\\.\PHYSICALDRIVED pclsObj->Get(L"Description",0,&DisDp,0,0); printf("\n Description:%ls",DisDp.bstrVal); //裝置描述 string pclsObj->Get(L"Caption",0,&DisCap,0,0); printf("\n Caption:%ls",DisCap.bstrVal); //裝置說明 string pclsObj->Get(L"Model",0,&DisMo,0,0); printf("\n Model:%ls",DisMo.bstrVal); //硬碟名稱 string pclsObj->Get(L"Manufacturer",0,&DisMan,0,0); printf("\n Manufacturer:%ls",DisMan.bstrVal); //生產廠家 string pclsObj->Get(L"SerialNumber",0,&DisSN,0,0); printf("\n SerialNumber:%ls",DisSN.bstrVal); //硬碟序列號 string pclsObj->Get(L"CapabilityDescriptions",0,&DisCD,0,0); //因為CapabilityDescriptions是二維的指標safearray,所以不能用printf直接輸出,要通過緩衝區把字串儲存下來再輸出 BSTR (*buf)[2]=NULL; if(FAILED(SafeArrayAccessData(DisCD.parray, (void **)&buf))) ::MessageBoxA(NULL,"出毛病了。","提示",MB_OK | MB_ICONWARNING); /*string str = _com_util::ConvertBSTRToString((*buf)[0]); string str1 = _com_util::ConvertBSTRToString((*buf)[1]); printf("\n CapabilityDescriptions:"); */ _tprintf(_T("\n********** CapabilityDescriptions:%ls"),*buf[0]); _tprintf(_T("\n********** CapabilityDescriptions:%ls"),(*buf)[1]); /* printf("\n %s",str.c_str()); printf("\n %s",str1.c_str());*/ SafeArrayUnaccessData(DisCD.parray); /*pclsObj->Get(L"Capabilities",0,&DisCD,0,0); printf("\n CapabilityDescriptions:%d",DisCD.bVal);*/ pclsObj->Get(L"DefaultBlockSize",0,&DisD,0,0); printf("\n DefaultBlockSize:%ls",DisD.bstrVal); //硬碟預設分塊大小 uint64 pclsObj->Get(L"MaxBlockSize",0,&DisMBS,0,0); printf("\n MaxBlockSize:%ls",DisMBS.bstrVal); //硬碟最大分塊大小 pclsObj->Get(L"MinBlockSize",0,&DisMiBS,0,0); printf("\n MinBlockSize:%ls",DisMiBS.bstrVal); //硬碟最小分塊大小 pclsObj->Get(L"SectorsPerTrack",0,&DisSPT,0,0); printf("\n SectorsPerTrack:%d",DisSPT.bstrVal); //硬碟扇區數 UInt32 pclsObj->Get(L"TotalCylinders",0,&DisTC,0,0); printf("\n TotalCylinders:%ls",DisTC.bstrVal); //硬碟柱面數 uinit64 pclsObj->Get(L"TotalHeads",0,&DisTH,0,0); printf("\n TotalHeads:%d",DisTH.bstrVal); //磁碟總頭數 UInt32 pclsObj->Get(L"TotalSectors",0,&DisTS,0,0); printf("\n TotalSectors:%ls",DisTS.bstrVal); //磁碟扇區數 uinit64 pclsObj->Get(L"TotalTracks",0,&DisTT,0,0); //DisTT.bstrVal=0; printf("\n TotalTracks:%ls",DisTT.bstrVal); //磁碟總道數 uinit64 /*pclsObj->Get(L"TracksPerCylinder",0,&DisID,0,0); DisID.bstrVal=0; printf("\n TracksPerCylinder:%ls",DisID.bstrVal); */ pclsObj->Get(L"TracksPerCylinder",0,&DisTPC,0,0); //DisTPC.bstrVal=0; printf("\n TracksPerCylinder:%d",DisTPC.intVal); //每柱磁軌數 uinit32 pclsObj->Get(L"FirmwareRevision",0,&DisFR,0,0); //DisFR.bstrVal=0; printf("\n FirmwareRevision:%ls",DisFR.bstrVal); //韌體版本 string pclsObj->Get(L"InterfaceType",0,&DisIT,0,0); printf("\n InterfaceType:%ls",DisIT.bstrVal); //介面型別 string pclsObj->Get(L"Size",0,&Disize,0,0); printf("\n Size:%ls",Disize.bstrVal); //硬碟容量 uint 64 // VariantClear(&DisID); VariantClear (&DisDp); VariantClear (&DisCap); VariantClear (&DisMo); VariantClear (&DisMan); VariantClear (&DisSN); VariantClear (&DisD); VariantClear (&DisCD); VariantClear (&DisMBS); VariantClear (&DisMiBS); VariantClear (&DisSPT); VariantClear (&DisTC); VariantClear (&DisTH); VariantClear (&DisTS); VariantClear (&DisTT); VariantClear (&DisTPC); VariantClear (&DisFR); VariantClear (&DisIT); VariantClear (&Disize); pclsObj->Release(); }