Win7下使用WMI获取移动磁盘序列号
来源:互联网 发布:mysql表别名 编辑:程序博客网 时间:2024/05/08 06:40
使用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上测试通过。
0 0
- Win7下使用WMI获取移动磁盘序列号
- 使用WMI来获取CPU序列号
- WMI获取磁盘信息
- 获取磁盘序列号
- 获取磁盘序列号GetVolumeInformation
- WMI获取本地磁盘信息
- 利用WMI获取磁盘信息
- linux下获取scsi上的磁盘设备的序列号
- asp.net(C#)通过WMI无法获取磁盘卷序列号(硬件信息)的问题解决办
- C#获取磁盘序列号和cpu序列号
- NET(C#)使用WMI事件查询实现对进程和可移动磁盘的监控
- C#使用WMI对进程和可移动磁盘的监控
- 用WMI获取磁盘硬件信息
- 使用批处理+WMI获取指定文件或目录所在的物理磁盘信息
- 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
- 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
- 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
- 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
- 开发中Log的管理
- Jsp的6种跳转方式
- 开发中异常的处理
- linux 和 windows C++ 子线程编程中子线程的退出——总结
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- Win7下使用WMI获取移动磁盘序列号
- JAVA抽象类、接口和C++的虚函数对比
- git - 查看当前的远程库
- 摘抄《10招让你成为杰出的Java程序员》
- 深广度平衡
- [Android] 项目更改包名
- git - 添加远程仓库
- android 手动显示与隐藏软键盘HIDE_NOT_ALWAYS
- 快捷方式工具类