WMI win32_physicalmedia或win32_diskdrive结果概率

时间:2014-06-16 12:34:42

标签: c++ winapi visual-c++ wmi wmi-query

我正在使用visual c ++ 2010。

我正在尝试使用win32_physicalmedia或win32_diskdrive检索硬盘序列号并且它正常工作,但是在很多pc上它会多次显示序列号,有时会显示符号和字符。

我正在使用的代码如下:

pSvc->ExecQuery(
bstr_t("WQL"), 
bstr_t("SELECT SerialNumber FROM Win32_PhysicalMedia"), // or Win32_DiskDrive
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
NULL,
&pEnumerator);

 IWbemClassObject *pclsObj;
ULONG uReturn = 0;

while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
    &pclsObj, &uReturn);

if(0 == uReturn)
{
    break;
}

VARIANT vtProp;

hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
    wcout << " Physical Drive SN : " << vtProp.bstrVal << endl;
    VariantClear(&vtProp);

    pclsObj->Release();
}

结果有时是这样的:
物理驱动器SN:325a323565222565226500
物理驱动器SN:325a323565222565226500
物理驱动器SN:3
物理驱动器SN:3
物理驱动器SN:3
物理驱动器SN:♥
物理驱动器SN:♥

正如您所看到的那样,串口是正确的,但它在第二行重复了两次,其他行显示符号,知道我只有一个硬盘。

请告知。

1 个答案:

答案 0 :(得分:0)

哦,伙计们,我想经过一些研究后我发现代码也试图获得所有可移动设备的序列号,而不仅仅是硬盘!!

任何人都可以告诉我如何仅将固定硬盘指定为mediatype! ?