vc操作wmi遍历进程信息
2010-11-24 17:47
330 查看
废话不多说,看代码:
需要提升进程权限,不然会得不到值。
本文有不足之处,还望大家多多指正。
#define _WIN32_DCOM #include <iostream> #include <comdef.h> #include <Wbemidl.h> #include <conio.h> #include <atlbase.h> using namespace std; #pragma comment(lib, "wbemuuid.lib") void SetPrivilege() { HANDLE hToken; LUID destLuid; TOKEN_PRIVILEGES TokenPrivileges; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken); //获得进程访问令牌的句柄 LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &destLuid); //操作的类型为SE_DEBUG_NAME TokenPrivileges.PrivilegeCount = 1; TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; TokenPrivileges.Privileges[0].Luid = destLuid; AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, 0, NULL, NULL); //提升权限 CloseHandle(hToken); //关闭句柄 } BOOL ManageWMI(); int main(int argc, char* argv[]) { CoInitialize(0); SetPrivilege(); if(!ManageWMI()) printf("%WMI Error!"); CoUninitialize(); _getch(); return 0; } BOOL ManageWMI() { CoInitializeSecurity( NULL, -1, // COM authentication NULL, // Authentication services NULL, // Reserved RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation NULL, // Authentication info EOAC_NONE, // Additional capabilities NULL // Reserved ); CComPtr<IWbemLocator> pLoc = NULL; pLoc.CoCreateInstance(__uuidof(WbemLocator)); CComPtr<IWbemServices> pSvc = NULL; pLoc->ConnectServer( _bstr_t(L"ROOT//CIMV2"), // Object path of WMI namespace NULL, // User name. NULL = current user NULL, // User password. NULL = current 0, // Locale. NULL indicates current NULL, // Security flags. 0, // Authority (e.g. Kerberos) 0, // Context object &pSvc // pointer to IWbemServices proxy ); CoSetProxyBlanket( pSvc, // Indicates the proxy to set RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx NULL, // Server principal name RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx NULL, // client identity EOAC_NONE // proxy capabilities ); CComPtr<IEnumWbemClassObject> pEnumerator = NULL; pSvc->ExecQuery( bstr_t("WQL"), bstr_t("SELECT * FROM Win32_Process"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); CComPtr<IWbemClassObject> pclsObj; ULONG uReturn = 0; while (1) { HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if(0 == uReturn) { break; } CComVariant v; pclsObj->Get(CComBSTR("commandline"),0, &v, 0, 0); if(v.bstrVal) std::wcout << v.bstrVal<< std::endl; } return 0; // Program successfully completed. }
需要提升进程权限,不然会得不到值。
本文有不足之处,还望大家多多指正。
相关文章推荐
- 求VC版本如何利用WMI获得磁盘信息 VC/MFC / 进程/线程/DLL - 社区 community.csdn.net
- VC中遍历进程并获取进程信息
- SDK 操作 list-view control 实例 -- 遍历进程
- VC中枚举进程,及获取进程相关信息的资料整理
- TerminateProcess结束进程(包括进程信息遍历)
- VC操作PowerPoint及 放映时候获得相关信息(补充)
- 进程特征码遍历VC版
- VC++ 对进程各种操作函数
- VC中实现用WMI获取设备信息
- Linux环境编程简明教程(1)获取进程相关信息的操作
- vbs 通过 WMI 得到进程列表及其它相关信息
- 进程(WINAPI),遍历并查找树状的进程信息,实现控制系统进程
- 接受POST表单传过来的信息 可以用foreach循环进行遍历操作
- WMI获取进程信息
- .NET基础示例系列之八:WMI获取进程信息
- VC实现进程遍历的四种方法
- 如何使用WMI获取进程信息
- vc++基础班[26]---进程的相关操作
- 跨进程 APIHOOK 非PE信息查询版本(没有遍历PE中的DLL导入表)
- 如何使用WMI获取进程信息 (转载)