Board logo

标题: 一段遍历当前进程及其模块信息的代码 [打印本页]

作者: x86    时间: 2006-2-20 21:36     标题: 一段遍历当前进程及其模块信息的代码

[这个贴子最后由x86在 2006/02/20 09:54pm 第 1 次编辑] #include #include #pragma comment(lib,"psapi.lib") #include "psapi.h" void PrintProcessNameAndID( DWORD processID ) { char szModuleName[MAX_PATH] = "undown"; char FilePath[MAX_PATH] = "unknown"; // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); // Get the process path. HMODULE hMod[500]; DWORD cbNeeded; DWORD ModNum; if (NULL != hProcess ) { if ( EnumProcessModules( hProcess, hMod, sizeof(hMod), &cbNeeded) ) {GetModuleFileNameEx(hProcess,hMod[0],FilePath,MAX_PATH); printf( "\n\n%s\n(Process ID: %u)\nnumber of modules:%d\n", FilePath, processID, cbNeeded/sizeof(HMODULE), FilePath ); for(ModNum = 0 ; ModNum < cbNeeded/sizeof(HMODULE); ModNum++) { GetModuleBaseName( hProcess, hMod[ModNum], szModuleName, sizeof(szModuleName) ); printf("\nModules name : %s",szModuleName); } } else return; } else return; CloseHandle( hProcess ); } void main( ) { // Get the list of process identifiers. DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return; // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the name and process identifier for each process. for ( i = 0; i < cProcesses; i++ ) PrintProcessNameAndID( aProcesses ); } :em10: :em10: :em10:
作者: x86    时间: 2006-2-20 22:10     标题: 一段遍历当前进程及其模块信息的代码

[这个贴子最后由x86在 2006/02/20 10:11pm 第 1 次编辑]

vc6.0编译通过.
其中几个关键的函数,需要最新的sdk.
程序大概的流程是这样的:
1: 使用EnumProcesses函数遍历所有进程,获取对应id.
2:再使用openprocess获取其句柄
3:用EnumProcessModules函数遍历其加载的所有模块
4:GetModuleBaseName获取模块信息
作者: x86    时间: 2006-2-25 19:11     标题: 一段遍历当前进程及其模块信息的代码

GUI版本: 运行效果: .Attributes=SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0)) return 0; DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc); CloseHandle( hToken ); return (0); }
作者: x86    时间: 2006-2-25 19:14     标题: 一段遍历当前进程及其模块信息的代码

执行文件:

作者: 无条件为你    时间: 2006-3-23 23:49     标题: 一段遍历当前进程及其模块信息的代码

EXE程序可以执行,很不错。
源代码不能编译,这一句出错:&#35;include "psapi.h",总是提示找不到。
可能是我比较笨,烦请指点迷津。
作者: x86    时间: 2006-3-24 01:27     标题: 一段遍历当前进程及其模块信息的代码

需要最新的sdk,
因为这个头文件是包含在新的sdk里的,同样的对应的动态库文件也在sdk里.
不过如果你使用的是visual stdio 2003以上的版本的话,就包含了这些函数声明了.
如果是vc6,就要到微软官方站点下载...
作者: x86    时间: 2006-3-24 01:28     标题: 一段遍历当前进程及其模块信息的代码

[这个贴子最后由x86在 2006/03/24 01:44am 第 1 次编辑]

楼上的有兴趣加我
或者用论坛短消息留下你的qq,可以帮忙:)
作者: 无条件为你    时间: 2006-3-24 07:13     标题: 一段遍历当前进程及其模块信息的代码

版主真是热情之极,让我受宠若惊。
昨天晚上我一直到12点20分才离开论坛,当时你一直不在线,我就加你的QQ但你一直没有反应。
我的计算机上安装的是visual stdio 2005,但以前我发觉同一段C++源程序,visual stdio 2005集成的C++编译出的EXE更大一些,所以我一般还是用Visual C++ 6.0编译。于是我在安装差不多3G的visual stdio 2005时为了节省硬盘空间而选择的是自定义安装,当时没有安装C++,等会我再重装一遍再试试,感谢指教!
我现在正在学习VB.net,对于C++水平有限。据老师讲,C++开发程序效率不如C&#35;和VB.net,所以我很久都没有去认真专心的学C++了,不过以前曾用C++写过一些小程序,我会陆续发到你管辖的块版里。
不知道怎么搞的,也许是我的网速太慢吧,每次登录本坛速度都慢的动不了。好在我有顽强的毅力去等待。我的QQ在我的资料里面有,已经加你了,等你验证呢。
作者: x86    时间: 2006-3-24 11:07     标题: 一段遍历当前进程及其模块信息的代码

一起来学习讨论嘛.
同时,欢迎您来这里发一些自己的原创!




欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/) Powered by Discuz! 7.2