【问题标题】:WMI win32_physicalmedia or win32_diskdrive result probWMI win32_physicalmedia 或 win32_diskdrive 结果概率
【发布时间】:2026-01-09 19:30:01
【问题描述】:

我正在使用 Visual c++ 2010。

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

我使用的代码如下:

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();
}

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

如您所见,序列号是正确的,但在第二行重复了两次,其他行显示符号,知道我只有 1 个硬盘。

请指教。

【问题讨论】:

  • 你需要错误检查...

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


【解决方案1】:

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

谁能告诉我如何只为固定硬盘指定媒体类型! ?

【讨论】: