使用WMI方式来获取移动磁盘序列号仅支持Vista及以上系统。网上有些资料显示,在XP系统下能够使用WMI获取序列号,我反正试过了都不行。后来在https://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx证实了这一点!废话少说,直接上代码:

#include <WbemIdl.h>
#include <comdef.h>
#pragma comment(lib,"WbemUuid.lib")HRESULT GetSerialNumber(void)
{IWbemServices* pWbemSvc = NULL;IWbemLocator* pWbemLoc = NULL;HRESULT hRes;hRes = CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hRes)){OutputDebugStr(_T("Failed to initialize COM library!"));return hRes;}hRes = CoInitializeSecurity(NULL, -1,                          // COM authenticationNULL,                        // Authentication servicesNULL,                        // ReservedRPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  NULL,                        // Authentication infoEOAC_NONE,                   // Additional capabilities NULL                         // Reserved);if (FAILED(hRes) && RPC_E_TOO_LATE != hRes){OutputDebugStr(_T("Failed to initialize security!"));return hRes;}hRes = CoCreateInstance(CLSID_WbemLocator, 0, \CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pWbemLoc);if (FAILED(hRes)){OutputDebugStr(_T("Failed to create IWbemLocator object!"));CoUninitialize();return hRes;}hRes = pWbemLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespaceNULL,                    // User name. NULL = current userNULL,                    // User password. NULL = current0,                       // Locale. NULL indicates currentNULL,                    // Security flags.0,                       // Authority (e.g. Kerberos)0,                       // Context object &pWbemSvc                // pointer to IWbemServices proxy);if (FAILED(hRes)){OutputDebugStr(_T("Could not connect!"));pWbemLoc->Release();     CoUninitialize();return hRes;}hRes = CoSetProxyBlanket(pWbemSvc,                    // Indicates the proxy to setRPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxxRPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxxNULL,                        // Server principal name RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxxNULL,                        // client identityEOAC_NONE                    // proxy capabilities );if (FAILED(hRes)){OutputDebugStr(_T("Could not set proxy blanket!"));pWbemSvc->Release();pWbemLoc->Release();     CoUninitialize();return hRes;}USES_CONVERSION;VARIANT vtProp;ULONG uRet = 0;IEnumWbemClassObject* pEnumClsObj = NULL;IWbemClassObject* pWbemClsObj = NULL;CComBSTR strQuery("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");hRes = pWbemSvc->ExecQuery(CComBSTR("WQL"), strQuery, \WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, \0, &pEnumClsObj);if (FAILED(hRes)){OutputDebugStr(_T("Failed to ExecQuery!"));if (pEnumClsObj != NULL){pEnumClsObj->Release();}pWbemSvc->Release();pWbemLoc->Release();     CoUninitialize();return hRes;  }VariantInit(&vtProp);CStringArray strArray1;CStringArray strArray2;CStringArray strArray3;while (SUCCEEDED(pEnumClsObj->Next(WBEM_INFINITE, 1, &pWbemClsObj, &uRet))){if (uRet <= 0){break;}//获取物理磁盘号:\\.\PHYSICALDRIVE0hRes = pWbemClsObj->Get(CComBSTR(_T("DeviceID")), 0, &vtProp, 0, 0);strArray1.Add(AnalizeVariant(&vtProp));VariantClear(&vtProp);//获取磁盘名称hRes = pWbemClsObj->Get(CComBSTR(_T("Model")), 0, &vtProp, 0, 0);strArray2.Add(AnalizeVariant(&vtProp));VariantClear(&vtProp);//获取磁盘序列号hRes = pWbemClsObj->Get(CComBSTR(_T("SerialNumber")), 0, &vtProp, 0, 0);strArray3.Add(AnalizeVariant(&vtProp));             VariantClear(&vtProp);        }VariantClear(&vtProp);if (pEnumClsObj != NULL){pEnumClsObj->Release();pEnumClsObj = NULL;}if (pWbemClsObj != NULL){pWbemClsObj->Release();pWbemClsObj = NULL;}pWbemSvc->Release();pWbemLoc->Release();CoUninitialize();return S_OK;
}

以上代码已在Win7 + VS 2008上测试通过。

Win7下使用WMI获取移动磁盘序列号相关推荐

  1. c/c++获取windows磁盘序列号

    最早用ReadDriverInfoNT,发现在特殊的笔记本上获取不到数据,一下的方法能解决这个问题. 试了很多台电脑,总是有一种方法是能获取到数据的 主函数部分: unsigned char hdsn ...

  2. Win7下硬盘安装Redhat双系统

    Win7下硬盘安装Redhat Linux 形成双系统过程详解 需要软件 EasyBCD2.0  和 linux ISO 系统镜像 RedHat linux下载地址:http://www.linuxi ...

  3. 读取盘序列号(是物理序列号,不是硬盘扇区上的序列号)在win7下的确不能用了

    我试了一下,原来读取盘序列号(是物理序列号,不是硬盘扇区上的序列号)在win7下的确不能用了,即使用管理员权限也不行,可能的原因 1.系统API变化了(原来是用CreateFile+DeviceIoC ...

  4. java 收集系统资源_方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息

    CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...

  5. C++封装dll供C#调用获取U盘/磁盘序列号信息

    本文中只讲C++中获取U盘序列号信息的核心代码以及返回值,参数传递的问题,具体封装细节可以查看楼主的一篇其他帖子,里面有具体的封装过程,提供参考(如果使用我这种方法建议一定要看我下面的帖子,因为关于项 ...

  6. 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号

    开发语言:C/C++ 支持平台:Windows 实现功能: 通过WMI获取网卡MAC地址.硬盘序列号.主板序列号.CPU ID.BIOS序列号 下载地址: WMI_DeviceQuery.zip 版本 ...

  7. Win7下实现磁盘软Raid1

    Win7下实现磁盘软Raid1 在硬件不支持的情况下可以通过Win7自带的镜像功能实现Raid1,步骤如下: 一,准备2块完全一样的硬盘 二,在其中一块上(磁盘0)分区安装好Win7系统(Ghost还 ...

  8. 解决Win7下安装VS2010不显示序列号框的两种方法

    VS2010在Windows 7下安装,一些朋友发现怎么在安装的时候输入序列号框怎么不出现呢?这该如何解决?下面西部e网的icech就找到了两种解决方法帮您解决这个问题: 1.修改setup.sdb文 ...

  9. Python使用WMI获取主板和CPU序列号

    2019独角兽企业重金招聘Python工程师标准>>> 安装wmi pip install pywin32 pip install wmi 代码 import wmi c = wmi ...

最新文章

  1. 《Lancet》发表全球学者联合声明!
  2. 鹅厂2020暑期实习第三次一面
  3. python好找工作么-python和django掌握到什么水平才好找工作?
  4. 隐藏SSID无线网络ID 你的无线网络真的安全吗?
  5. Leetcode--3Sum
  6. php-5.2.6安装,php5.2.6安装openssl.o扩展,make时报错?
  7. c语言打印空心等腰梯形乐学,C语言做激光发射
  8. 0xff00是65208
  9. Diy页面服务端渲染解决方案
  10. 3.1等待和通知API(Wait-and-Notify API Tour)
  11. 依赖于 !important 标签是个危险的现象。奔驰车如何查4S店的保养记录
  12. 安卓苹果均兼容的移动版CAD看图软件——迅捷CAD看图
  13. Navicat Premium 12安装包下载
  14. vs2010下配置HPSocket教程,详细截图附入门demo源码
  15. 就百度指数对比分析“微博”与“知乎”搜索人数
  16. 电动按摩帖芯片FH8B23S16B单片机为什么这么多人用?
  17. CMAQ-5.2安装
  18. 主题讲座:移动互联网时代的创业机会
  19. 考题篇(5.2) 06. IPsec ❀ FortiGate ❀ Fortinet 网络安全专家 NSE 4
  20. BACnet IP通讯方式组网步骤

热门文章

  1. jQuery Validate验证使用记录
  2. 看图猜成语1.0.5版本小程序带流量主
  3. 计算机无法识别机qie硬盘,(普及知识)让数据无法恢复的秘密(资料完全粉碎)...
  4. python圣诞_Python给你的头像加上圣诞帽
  5. 某银行项目224次升级新人礼、权益、越推越有礼需求梳理@20201214
  6. 微信小程序报错 http://localhost:8084 不在以下 request 合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/a
  7. 真无线蓝牙耳机玩游戏真的不行吗?2021哪款蓝牙耳机性价比高?
  8. 什么时候报空指针异常?
  9. 电工电子技术.电力拖动实训考核装置
  10. 小学生计算机科学论文,计算机科学技术论文