|
▼ひよひよさん:
>▼HGST使い?さん:
>アドバイスありがとうございました。
>おかげさまで、VisualC++ から情報が取得できるところまでたどり着きました。
>
>後ほど VisualC++ の実装例を提示させていただきます。
初期化部他は CrystalDiskInfo のソースコード参照のこと
以下重要ポイントだけ。
pIWbemServices->ExecQuery(SysAllocString(L"WQL"),
SysAllocString(L"select * from win32_LogicalDisk where drivetype = 3"), 0, NULL, &pEnumCOMDevs);
while(pEnumCOMDevs && SUCCEEDED(pEnumCOMDevs->Next(2000, 1, &pCOMDev, &uReturned)) && uReturned == 1)
{
CString disk, partition, drive, mapping;
VARIANT pVal;
VariantClear(&pVal);
if(pCOMDev->Get(L"DeviceID", 0L, &pVal, NULL, NULL) == WBEM_S_NO_ERROR && pVal.vt > VT_NULL)
{
disk = pVal.bstrVal;
VariantClear(&pVal);
}
pIWbemServices->ExecQuery(SysAllocString(L"WQL"),
SysAllocString(L"SELECT * FROM Win32_DiskPartition"), 0, NULL, &pEnumCOMDevs2);
while(pEnumCOMDevs2 && SUCCEEDED(pEnumCOMDevs2->Next(2000, 1, &pCOMDev, &uReturned)) && uReturned == 1)
{
VariantClear(&pVal);
if(pCOMDev->Get(L"DeviceID", 0L, &pVal, NULL, NULL) == WBEM_S_NO_ERROR && pVal.vt > VT_NULL)
{
partition = pVal.bstrVal;
VariantClear(&pVal);
}
IWbemContext *pCtx = 0;
IWbemCallResult *pResult = 0;
mapping.Format(_T("Win32_LogicalDiskToPartition.Antecedent=\"Win32_DiskPartition.DeviceID=\\\"%s\\\"\",Dependent=\"Win32_LogicalDisk.DeviceID=\\\"%s\\\"\""),
partition, disk);
pIWbemServices->GetObject((BSTR)mapping.GetString(), 0, pCtx, &pCOMDev2, &pResult);
if(pCOMDev2)
{
CString cstr;
cstr.Format(_T("キタコレ:%s %s"), partition, disk);
AfxMessageBox(cstr);
}
}
}
随分悩まされた問題ですがようやく解決しました。HGST使い?さんをはじめアドバイスくださった皆様に感謝いたします。
|
|