.php lspc.html_WMI接口demo

#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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值