利用WMI获取本机基本信息
来源:互联网 发布:蘑菇插件mac 编辑:程序博客网 时间:2024/04/30 00:15
一.WMI简介
WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源,比如用户可以在远程计算机器上启动一个进程;设定一个在特定日期和时间运行的进程;远程启动计算机;获得本地或远程计算机的已安装程序列表;查询本地或远程计算机的Windows事件日志等等。
二.利用WMI获取本机基本信息
在这里,主要是利用wmi提供的一些接口实现了一个简单的类,可以方便的调用,获取本机序列号信息。头文件如下:
#pragma once#include<atlbase.h>#include<objbase.h>#include<WbemIdl.h>#include<WbemCli.h>#include<comdef.h>#pragma comment(lib,"wbemuuid.lib")#pragma comment(lib,"ole32.lib")#define DEF_MAX_WBEMOBJ20#define DEF_MAX_PATH260class TClientDMI{public:TClientDMI();~TClientDMI();public:CString getDMIInformation(TCHAR *pWin32_ClassName, TCHAR *pUniqueCaption,TCHAR *pUniqueValue, TCHAR *pTargetCaption);private:HRESULT _initDMI();private:BSTR m_strNameSpace;BOOL m_blDMIInit;//DMI init flagprivate:IWbemLocator* m_pIWbemLocator;IWbemServices*m_pIWbemServices;IEnumWbemClassObject*m_pIEnumWbem;IWbemClassObject*m_szIWbemObject[DEF_MAX_WBEMOBJ];BSTRm_strClassName;};
#include"stdafx.h"TClientDMI::TClientDMI(){m_blDMIInit= FALSE;m_strNameSpace= NULL;m_pIWbemLocator = NULL;m_pIWbemServices= NULL;m_pIEnumWbem= NULL;m_strClassName= NULL;for (int i=0;i<DEF_MAX_WBEMOBJ;i++){m_szIWbemObject[i] = NULL;}}TClientDMI::~TClientDMI(){if (m_pIEnumWbem != NULL){ m_pIEnumWbem->Release();m_pIEnumWbem = NULL;}if (m_strClassName != NULL){SysFreeString(m_strClassName);m_strClassName = NULL;}if (m_strNameSpace != NULL){SysFreeString(m_strNameSpace);m_strNameSpace = NULL;}if (m_pIWbemServices != NULL){m_pIWbemServices->Release();m_pIWbemServices = NULL;}if (m_pIWbemLocator != NULL){m_pIWbemLocator->Release();m_pIWbemLocator = NULL;}CoUninitialize();}//////////////////////////////////////////////////////////////////////////////init DMI interface////////////////////////////////////////////////////////////////////////////HRESULT TClientDMI::_initDMI(){HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hr)){return hr;}hr = CoInitializeSecurity(NULL, -1, NULL, NULL,RPC_C_AUTHN_LEVEL_PKT_PRIVACY,RPC_C_IMP_LEVEL_IMPERSONATE,NULL, EOAC_SECURE_REFS, NULL);if (FAILED(hr)){return hr;}hr = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER,IID_IWbemLocator, (LPVOID*)&m_pIWbemLocator);if (FAILED(hr)){return hr;}m_strNameSpace = SysAllocString(_T("\\\\.\\root\\cimv2"));hr = m_pIWbemLocator->ConnectServer(m_strNameSpace, NULL, NULL, 0L, 0L, NULL, NULL, &m_pIWbemServices);if (FAILED(hr)){return hr;}m_blDMIInit = TRUE;return hr;}////////////////////////////////////////////////////////////////////////////common query process//step1. Init DMI interface//step2. Get ClassInformation//step3. Get Instance//step4. Get the property of Instance//////////////////////////////////////////////////////////////////////////CString TClientDMI::getDMIInformation(TCHAR *pWin32_ClassName, TCHAR *pUniqueCaption, TCHAR *pUniqueValue, TCHAR *pTargetCaption){CString strRet = _T("");//TCHAR szTarget[MAX_PATH] = { 0 };HRESULT hr = S_OK;if (!m_blDMIInit){hr= _initDMI();}if (SUCCEEDED(hr)){VARIANT var;ULONG uReturned;HRESULT hr;VariantInit(&var);m_pIEnumWbem = NULL;m_strClassName = NULL;m_strClassName = SysAllocString(pWin32_ClassName);if (!m_strClassName){return strRet;}hr = m_pIWbemServices->CreateInstanceEnum(m_strClassName, 0, NULL, &m_pIEnumWbem);if (FAILED(hr)){return strRet;}uReturned = 1;hr = m_pIEnumWbem->Next(2000 * DEF_MAX_WBEMOBJ, DEF_MAX_WBEMOBJ, m_szIWbemObject, &uReturned);if (FAILED(hr)){return strRet;}VariantClear(&var);UINT i = 0;for (i = 0; i < uReturned; i++){if (m_szIWbemObject[i] != NULL){VariantClear(&var);var.bstrVal = NULL;if (pUniqueCaption != NULL){hr = m_szIWbemObject[i]->Get(pUniqueCaption, 0, &var, NULL, NULL);if (hr != WBEM_S_NO_ERROR){return strRet;}}if (pUniqueCaption == NULL || var.bstrVal!=NULL && _tcsncmp((V_BSTR(&var)),
<span style="white-space:pre"></span>pUniqueValue, _tcslen(pUniqueValue)) == 0){VariantClear(&var);var.bstrVal = NULL;hr = m_szIWbemObject[i]->Get(pTargetCaption, 0, &var, NULL, NULL);if (var.bstrVal!=NULL){strRet = var.bstrVal;//_tcscpy(szTarget, var.bstrVal);}break;}}}VariantClear(&var);}return strRet;}
获取本机序列号,无线网卡设备ID,以及mac地址。
#include "stdafx.h"int main(int argc, TCHAR* argv[]){int ret = 0;
<span style="white-space:pre">TCHAR szTarget[DEF_MAX_PATH] = { 0 };</span>CString str = _T("");TClientDMI *pDMI = new TClientDMI;str = pDMI->getDMIInformation(_T("Win32_BIOS"), NULL, NULL, _T("SerialNumber"));_tprintf(_T("%str\n"), str);_tcscpy(szTarget, pDMI->getDMIInformation(_T("Win32_NetworkAdapter"), _T("NetConnectionID"), _T("WLAN"), _T("PNPDeviceID")));_tcscpy(szTarget, pDMI->getDMIInformation(_T("Win32_DiskDrive"), NULL, NULL, _T("InterfaceType")));_tprintf(_T("%s\n"), szTarget);_tcscpy(szTarget, pDMI->getDMIInformation(_T("Win32_NetworkAdapter"), _T("NetConnectionID"), _T("Ethernet"), _T("MACAddress")));_tprintf(_T("%s\n"), szTarget);if (pDMI){delete pDMI;pDMI = NULL;}return ret;}
0 0
- 利用WMI获取本机基本信息
- 利用WMI修改本机Gateway,DNS
- (C++)从本机获取WMI数据.
- (C++)从本机获取WMI数据.
- PYWIN32 + WMI模块:获取WINDOWS系统基本信息
- 利用WMI获取硬盘信息
- 利用WMI获取磁盘信息
- 基于JAVA代码 获取手机基本信息(本机号码,SDK版本,系统版本,手机型号)
- 基于JAVA代码 获取手机基本信息(本机号码,SDK版本,系统版本,手机型号)
- C#得到一些本机的基本信息
- 利用wmi获取杀软信息
- javascript利用wmi获取客户端网卡信息
- 通过JAVA代码获取手机的一些基本信息(本机号码,SDK版本,系统版本,手机型号)
- 利用python如何远程服务器,获取其基本信息
- 利用WMI获取和更新网络设置(VBS脚本)
- 利用ioctl获取本机指定设备的MAC地址
- 利用JS获取本机IP并提交的方法
- windows8.1 下 python利用命令获取本机IP
- 文章标题
- 周易六十四卦——咸卦
- 使用Spring AOP和Cookie做网站免登陆
- 大型网站的架构
- 媒体查询联系——联系人列表
- 利用WMI获取本机基本信息
- Android数据存储(二)----- SharedPreferences存储
- 状态模式(State)
- hdu 5056(尺取法)
- Bundle对象的使用
- 创建ANDROID开发环境
- mysql重复插入insert时更新ON DUPLICATE KEY UPDATE
- SpringMVC和Struts2的区别
- CircleImageView自定义圆形头像控件