Win7下使用WMI获取移动磁盘序列号
使用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获取移动磁盘序列号相关推荐
- c/c++获取windows磁盘序列号
最早用ReadDriverInfoNT,发现在特殊的笔记本上获取不到数据,一下的方法能解决这个问题. 试了很多台电脑,总是有一种方法是能获取到数据的 主函数部分: unsigned char hdsn ...
- Win7下硬盘安装Redhat双系统
Win7下硬盘安装Redhat Linux 形成双系统过程详解 需要软件 EasyBCD2.0 和 linux ISO 系统镜像 RedHat linux下载地址:http://www.linuxi ...
- 读取盘序列号(是物理序列号,不是硬盘扇区上的序列号)在win7下的确不能用了
我试了一下,原来读取盘序列号(是物理序列号,不是硬盘扇区上的序列号)在win7下的确不能用了,即使用管理员权限也不行,可能的原因 1.系统API变化了(原来是用CreateFile+DeviceIoC ...
- java 收集系统资源_方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...
- C++封装dll供C#调用获取U盘/磁盘序列号信息
本文中只讲C++中获取U盘序列号信息的核心代码以及返回值,参数传递的问题,具体封装细节可以查看楼主的一篇其他帖子,里面有具体的封装过程,提供参考(如果使用我这种方法建议一定要看我下面的帖子,因为关于项 ...
- 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
开发语言:C/C++ 支持平台:Windows 实现功能: 通过WMI获取网卡MAC地址.硬盘序列号.主板序列号.CPU ID.BIOS序列号 下载地址: WMI_DeviceQuery.zip 版本 ...
- Win7下实现磁盘软Raid1
Win7下实现磁盘软Raid1 在硬件不支持的情况下可以通过Win7自带的镜像功能实现Raid1,步骤如下: 一,准备2块完全一样的硬盘 二,在其中一块上(磁盘0)分区安装好Win7系统(Ghost还 ...
- 解决Win7下安装VS2010不显示序列号框的两种方法
VS2010在Windows 7下安装,一些朋友发现怎么在安装的时候输入序列号框怎么不出现呢?这该如何解决?下面西部e网的icech就找到了两种解决方法帮您解决这个问题: 1.修改setup.sdb文 ...
- Python使用WMI获取主板和CPU序列号
2019独角兽企业重金招聘Python工程师标准>>> 安装wmi pip install pywin32 pip install wmi 代码 import wmi c = wmi ...
最新文章
- 《Lancet》发表全球学者联合声明!
- 鹅厂2020暑期实习第三次一面
- python好找工作么-python和django掌握到什么水平才好找工作?
- 隐藏SSID无线网络ID 你的无线网络真的安全吗?
- Leetcode--3Sum
- php-5.2.6安装,php5.2.6安装openssl.o扩展,make时报错?
- c语言打印空心等腰梯形乐学,C语言做激光发射
- 0xff00是65208
- Diy页面服务端渲染解决方案
- 3.1等待和通知API(Wait-and-Notify API Tour)
- 依赖于 !important 标签是个危险的现象。奔驰车如何查4S店的保养记录
- 安卓苹果均兼容的移动版CAD看图软件——迅捷CAD看图
- Navicat Premium 12安装包下载
- vs2010下配置HPSocket教程,详细截图附入门demo源码
- 就百度指数对比分析“微博”与“知乎”搜索人数
- 电动按摩帖芯片FH8B23S16B单片机为什么这么多人用?
- CMAQ-5.2安装
- 主题讲座:移动互联网时代的创业机会
- 考题篇(5.2) 06. IPsec ❀ FortiGate ❀ Fortinet 网络安全专家 NSE 4
- BACnet IP通讯方式组网步骤
热门文章
- jQuery Validate验证使用记录
- 看图猜成语1.0.5版本小程序带流量主
- 计算机无法识别机qie硬盘,(普及知识)让数据无法恢复的秘密(资料完全粉碎)...
- python圣诞_Python给你的头像加上圣诞帽
- 某银行项目224次升级新人礼、权益、越推越有礼需求梳理@20201214
- 微信小程序报错 http://localhost:8084 不在以下 request 合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/a
- 真无线蓝牙耳机玩游戏真的不行吗?2021哪款蓝牙耳机性价比高?
- 什么时候报空指针异常?
- 电工电子技术.电力拖动实训考核装置
- 小学生计算机科学论文,计算机科学技术论文