#include
#include
#include "wbemidl.h"
#pragma comment(lib,"WbemUuid.lib")
static IWbemLocator *pLoc = NULL;
static IWbemServices *pSvc = NULL;
static IEnumWbemClassObject* pEnumerator = NULL;
static IWbemClassObject* pclsObj = NULL;
// http://www.pudn.com/downloads44/sourcecode/windows/system/detail148813.html
// http://www.qingfengju.com/article.asp?id=62
// http://blog.csdn.net/shiwei0124/article/details/4985790
// http://topic.csdn.net/u/20100623/15/ad7c592d-2548-4aae-8ca2-18065baf6566.html
// http://msdn.microsoft.com/en-us/library/aa389273(VS.85).aspx
void DisplayALL( )
{
HRESULT hres;
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(bstr_t("WQL"),
// bstr_t("SELECT * FROM Win32_SoundDevice"), // 音频设备
// bstr_t("SELECT * FROM Win32_Product"),
//bstr_t("SELECT * FROM Win32_Registry"), // 注册表
//bstr_t("SELECT * FROM Win32_OnBoardDevice"), // 主板上的嵌入设备
//bstr_t("SELECT * FROM Win32_MotherboardDevice"), // 母板
//bstr_t("SELECT * FROM Win32_BaseBoard"), // 主板
//bstr_t("SELECT * FROM Win32_DMAChannel"), // DMA通道
//bstr_t("SELECT * FROM Win32_Bus"), // 总线
//bstr_t("SELECT * FROM Win32_BIOS"), // BIOS系统
//bstr_t("SELECT * FROM Win32_SystemBIOS"), // BIOS系统
//bstr_t("SELECT * FROM Win32_Processor"), // 处理器
//bstr_t("SELECT * FROM Win32_SystemProcesses"), //
//bstr_t("SELECT * FROM Win32_Process"), // 系统进程
//bstr_t("SELECT * FROM Win32_Thread"), // 系统线程
//bstr_t("SELECT * FROM Win32_AssociatedProcessorMemory"), // CACHE
//bstr_t("SELECT * FROM Win32_CacheMemory"), // 二级缓存内存
bstr_t("SELECT * FROM Win32_PhysicalMedia"), // 物理媒体信息 (硬盘)//1
//bstr_t("SELECT * FROM Win32_LogicalDisk "), // 逻辑驱动器
//bstr_t("SELECT * FROM Win32_DiskDrive"), // 磁盘驱动器//1
//bstr_t("SELECT * FROM Win32_MemoryDevice"), // 内存设备
//bstr_t("SELECT * FROM Win32_PhysicalMemoryArray"), // 物理内存数组
//bstr_t("SELECT * FROM Win32_PhysicalMemoryLocation"), // 物理内存位置
//bstr_t("SELECT * FROM CIM_NumericSensor"), // 数字传感器
//bstr_t("SELECT * FROM Win32_VoltageProbe"), // 数字传感器
//bstr_t("SELECT * FROM Win32_TemperatureProbe"), // 温度传感器
//bstr_t("SELECT * FROM Win32_CurrentProbe"),
//bstr_t("SELECT * FROM Win32_OperatingSystem"), // 操作系统
//bstr_t("SELECT * FROM Win32_UserAccount"), // 用户账号
//bstr_t("SELECT * FROM Win32_SerialPort"), // 串行接口
//bstr_t("SELECT * FROM Win32_ParallelPort"), // 并行接口
//bstr_t("SELECT * FROM Win32_SCSIController"), // 小型计算机系统接口
//bstr_t("SELECT * FROM Win32_PortResource"), // I/O 端口
//bstr_t("SELECT * FROM Win32_PNPDevice"), // 即插即用设备
//bstr_t("SELECT * FROM Win32_NetworkAdapter"), // 网络适配器
//bstr_t("SELECT * FROM Win32_NetworkAdapterConfiguration"), // 网络适配器 配置信息
//bstr_t("SELECT * FROM Win32_NetworkAdapterSetting"),
//bstr_t("SELECT * FROM Win32_AssociatedBattery"),
//bstr_t("SELECT * FROM Win32_Battery"), // 内部电池
//bstr_t("SELECT * FROM Win32_PortableBattery"),
//bstr_t("SELECT * FROM Win32_PowerManagementEvent"),
//bstr_t("SELECT * FROM Win32_UninterruptiblePowerSupply"),
//bstr_t("SELECT * FROM Win32_DriverForDevice"),
//bstr_t("SELECT * FROM Win32_Printer"), // 打印机
//bstr_t("SELECT * FROM Win32_TCPIPPrinterPort"),
//bstr_t("SELECT * FROM Win32_POTSModem"),
//bstr_t("SELECT * FROM Win32_DesktopMonitor"), // 显示器
//bstr_t("SELECT * FROM Win32_VideoController"), // 显卡
//bstr_t("SELECT * FROM Win32_CDROMDrive"),
//bstr_t("SELECT * FROM Win32_Keyboard"), // 键盘
//bstr_t("SELECT * FROM Win32_AutochkSetting"),
//bstr_t("SELECT * FROM Win32_PointingDevice"), // 点击设备:鼠标、触摸板
//bstr_t("SELECT * FROM Win32_Fan"), // 风扇
//bstr_t("SELECT * FROM Win32_WMISetting"),
//bstr_t("SELECT * FROM Win32_TimeZone"),
//bstr_t("SELECT * FROM Win32_Environment"), // 环境路径
//bstr_t("SELECT * FROM Win32_QuotaSetting"),
//bstr_t("SELECT * FROM Win32_NetworkProtocol"), // 己安装的网络协议
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
assert(FALSE);
return;
}
IWbemClassObject* pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if ((0 == uReturn) || (0 == pclsObj))
{
break;
}
VARIANT vtProp;
VariantInit(&vtProp);
vtProp.bstrVal = 0;
hr = pclsObj->GetObjectText(0, &vtProp.bstrVal);
if (vtProp.bstrVal != 0)
{
wprintf(TEXT("%s:\n"),vtProp.bstrVal);
}
VariantClear(&vtProp);
}
if (pEnumerator)
{
pEnumerator->Release();
}
if (pclsObj)
{
pclsObj->Release();
}
return ;
}
HRESULT ExecQuery(char *CmdString)
{
return pSvc->ExecQuery(bstr_t("WQL"),bstr_t(CmdString),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator);
}
void EnumeratorclsObj(wchar_t* Item1, wchar_t* Item2)
{
ULONG uReturn = 0;
VARIANT vtProp;
if (Item1==NULL && Item2==NULL)return;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if ((0 == uReturn) || (0 == pclsObj))
{
break;
}
if (Item1)
{
VariantInit(&vtProp);
vtProp.bstrVal = 0;
hr = pclsObj->Get((LPCWSTR)Item1, 0, &vtProp, 0, 0);
if(hr != WBEM_S_NO_ERROR || vtProp.bstrVal == 0)
{
VariantClear(&vtProp);
continue;
}
char* lpszText2 = _com_util::ConvertBSTRToString(vtProp.bstrVal);
wprintf(TEXT("%s:"),Item1);
printf("%s",lpszText2);
printf("\n");
delete[] lpszText2;
VariantClear(&vtProp);
}
if (Item2)
{
VariantInit(&vtProp);
vtProp.bstrVal = 0;
hr = pclsObj->Get((LPCWSTR)Item2, 0, &vtProp, 0, 0);
if(hr != WBEM_S_NO_ERROR || vtProp.bstrVal == 0)
{
VariantClear(&vtProp);
continue;
}
char* lpszText2 = _com_util::ConvertBSTRToString(vtProp.bstrVal);
wprintf(TEXT("%s:"),Item2);
printf("%s",lpszText2);
printf("\n");
delete[] lpszText2;
VariantClear(&vtProp);
}
}
return;
}
int main(void)
{
HRESULT hres;
do
{
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
assert(FALSE);
break;
}
hres = CoInitializeSecurity(NULL,-1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);
if (FAILED(hres))
{
assert(FALSE);
break;
}
hres = CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator,(LPVOID *)&pLoc);
if (FAILED(hres))
{
assert(FALSE);
break;
}
hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"),NULL,NULL,0,NULL,0,0,&pSvc);
if (FAILED(hres))
{
assert(FALSE);
break;
}
hres = CoSetProxyBlanket(pSvc,RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE,NULL,RPC_C_AUTHN_LEVEL_CALL,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE);
if (FAILED(hres))
{
assert(FALSE);
break;
}
// 网卡
hres = ExecQuery("SELECT * FROM Win32_NetworkAdapter");
if (SUCCEEDED(hres))
{
EnumeratorclsObj(L"NetConnectionID",L"MACAddress");
}
// CPU
hres =ExecQuery("SELECT * FROM Win32_Processor");
if (SUCCEEDED(hres))
{
EnumeratorclsObj(L"DeviceID",L"ProcessorId");
}
// 硬盘
hres = ExecQuery("SELECT * FROM Win32_PhysicalMedia");
if (SUCCEEDED(hres))
{
EnumeratorclsObj(L"SerialNumber",NULL);
}
// 显卡
hres = ExecQuery("SELECT * FROM Win32_VideoController");
if (SUCCEEDED(hres))
{
EnumeratorclsObj(L"PNPDeviceID",NULL);
}
// 操作系统
hres = ExecQuery("SELECT * FROM Win32_OperatingSystem");
if (SUCCEEDED(hres))
{
EnumeratorclsObj(L"SerialNumber",NULL);
}
DisplayALL();
} while (FALSE);
pSvc->Release();
pLoc->Release();
if (pEnumerator)
{
pEnumerator->Release();
}
if (pclsObj)
{
pclsObj->Release();
}
CoUninitialize();
getch();
getch();
return 0;
}