【发布时间】: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