原创 05月14日 01:50:22
标签:
c++ /
WMI /
CPU
官网找到一个例子,根据例子修改下可以获取很多信息
[cpp]
#define_WIN32_DCOM
#include
usingnamespacestd;
#include
#include
#pragmacomment(lib,"wbemuuid.lib")
intmain(intargc,char**argv)
{
HRESULThres;
//Step1:--------------------------------------------------
//InitializeCOM.------------------------------------------
hres=CoInitializeEx(0,COINIT_MULTITHREADED);
if(FAILED(hres))
{
cout<
<
return1;//Programhasfailed.
}
//Step2:--------------------------------------------------
//SetgeneralCOMsecuritylevels--------------------------
hres=CoInitializeSecurity(
NULL,
-1,//COMauthentication
NULL,//Authenticationservices
NULL,//Reserved
RPC_C_AUTHN_LEVEL_DEFAULT,//Defaultauthentication
RPC_C_IMP_LEVEL_IMPERSONATE,//DefaultImpersonation
NULL,//Authenticationinfo
EOAC_NONE,//Additionalcapabilities
NULL//Reserved
);
if(FAILED(hres))
{
cout<
<
CoUninitialize();
return1;//Programhasfailed.
}
//Step3:---------------------------------------------------
//ObtaintheinitiallocatortoWMI-------------------------
IWbemLocator*pLoc=NULL;
hres=CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,(LPVOID*)&pLoc);
if(FAILED(hres))
{
cout<
<
<
CoUninitialize();
return1;//Programhasfailed.
}
//Step4:-----------------------------------------------------
//ConnecttoWMIthroughtheIWbemLocator::ConnectServermethod
IWbemServices*pSvc=NULL;
//Connecttotheroot\cimv2namespacewith
//thecurrentuserandobtainpointerpSvc
//tomakeIWbemServicescalls.
hres=pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"),//ObjectpathofWMInamespace
NULL,//Username.NULL=currentuser
NULL,//Userpassword.NULL=current
0,//Locale.NULLindicatescurrent
NULL,//Securityflags.
0,//Authority(forexample,Kerberos)
0,//Contextobject
&pSvc//pointertoIWbemServicesproxy
);
if(FAILED(hres))
{
cout<
<
pLoc->Release();
CoUninitialize();
return1;//Programhasfailed.
}
cout<
//Step5:--------------------------------------------------
//Setsecuritylevelsontheproxy-------------------------
hres=CoSetProxyBlanket(
pSvc,//Indicatestheproxytoset
RPC_C_AUTHN_WINNT,//RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE,//RPC_C_AUTHZ_xxx
NULL,//Serverprincipalname
RPC_C_AUTHN_LEVEL_CALL,//RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE,//RPC_C_IMP_LEVEL_xxx
NULL,//clientidentity
EOAC_NONE//proxycapabilities
);
if(FAILED(hres))
{
cout<
<
pSvc->Release();
pLoc->Release();
CoUninitialize();
return1;//Programhasfailed.
}
//Step6:--------------------------------------------------
//UsetheIWbemServicespointertomakerequestsofWMI----
//Forexample,getthenameoftheoperatingsystem
IEnumWbemClassObject*pEnumerator=NULL;
hres=pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT*FROMWin32_OperatingSystem"),
WBEM_FLAG_FORWARD_ONLY|WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if(FAILED(hres))
{
cout<
<
<
pSvc->Release();
pLoc->Release();
CoUninitialize();
return1;//Programhasfailed.
}
//Step7:-------------------------------------------------
//Getthedatafromthequeryinstep6-------------------
IWbemClassObject*pclsObj=NULL;
ULONGuReturn=0;
while(pEnumerator)
{
HRESULThr=pEnumerator->Next(WBEM_INFINITE,1,
&pclsObj,&uReturn);
if(0==uReturn)
{
break;
}
VARIANTvtProp;
//GetthevalueoftheNameproperty
hr=pclsObj->Get(L"Name",0,&vtProp,0,0);
wcout<
VariantClear(&vtProp);
pclsObj->Release();
}
//Cleanup
//========
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
CoUninitialize();
return0;//Programsuccessfullycompleted.
}
下面列出了常用信息的类:
Win32_Processor// CPU处理器
Win32_PhysicalMemory//物理内存
Win32_Keyboard//键盘
Win32_PointingDevice//点输入设备,如鼠标
Win32_DiskDrive//硬盘驱动器
Win32_CDROMDrive//光盘驱动器
Win32_BaseBoard//主板
Win32_BIOS// BIOS芯片
Win32_ParallelPort//并口
Win32_SerialPort//串口
Win32_SoundDevice //多媒体设置
Win32_USBController// USB控制器
Win32_NetworkAdapter//网络适配器
Win32_NetworkAdapterConfiguration//网络适配器设置
Win32_Printer//打印机
Win32_PrinterConfiguration //打印机设置
Win32_PrintJob//打印机任务
Win32_TCPIPPrinterPort//打印机端口
Win32_POTSModem// MODEM
Win32_POTSModemToSerialPort// MODEM端口
Win32_DesktopMonitor//显示器
Win32_VideoController//显卡细节。
Win32_VideoSettings//显卡支持的显示模式。
Win32_TimeZone//时区
Win32_SystemDriver//驱动程序
Win32_DiskPartition//磁盘分区
Win32_LogicalDisk//逻辑磁盘
Win32_LogicalMemoryConfiguration//逻辑内存配置
Win32_PageFile//系统页文件信息
Win32_PageFileSetting//页文件设置
Win32_BootConfiguration//系统启动配置
Win32_OperatingSystem//操作系统信息
Win32_StartupCommand//系统自动启动程序
Win32_Service//系统安装的服务
Win32_Group//系统管理组
Win32_GroupUser//系统组帐号
Win32_UserAccount//用户帐号
Win32_Process//系统进程
Win32_Thread//系统线程
Win32_Share//共享
Win32_NetworkClient//已安装的网络客户端
Win32_NetworkProtocol//已安装的网络协议