找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6462|回复: 5

[开源] 【分享】Pslist+Pskill程序源代码及psapi.h下载

  [复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2009-7-20 22:51:25 | 显示全部楼层 |阅读模式
<p><font style="BACKGROUND-COLOR: #ffffff">//pslist.cpp<br/>#include &lt;windows.h&gt;<br/>#include &lt;tlhelp32.h&gt;<br/>#include &lt;stdio.h&gt;<br/>#include &lt;tchar.h&gt;<br/>#include &lt;psapi.h&gt;<br/>#pragma comment(lib,"psapi.lib")</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">BOOL SetPrivilege()<br/>{<br/>HANDLE hProcess, hToken; <br/>TOKEN_PRIVILEGES NewState; <br/>DWORD ProcessId ; <br/>LUID luidPrivilegeLUID; <br/>ProcessId = GetCurrentProcessId(); <br/>hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId); <br/>if(!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &amp;hToken)||!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &amp;luidPrivilegeLUID)) <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("SetPrivilege Error\n");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE; <br/>} <br/>NewState.PrivilegeCount = 1; <br/>NewState.Privileges[0].Luid = luidPrivilegeLUID; <br/>NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; <br/>if(!AdjustTokenPrivileges(hToken, FALSE, &amp;NewState, NULL, NULL, NULL))<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("AdjustTokenPrivilege Errro\n");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br/>}<br/>return TRUE;<br/>}</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">void ListModules( DWORD processID )<br/>{<br/>HMODULE hMods[1024];<br/>HANDLE hProcess;<br/>DWORD cbNeeded;<br/>unsigned int i;</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE, processID);<br/>if (NULL == hProcess)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">if(EnumProcessModules(hProcess,hMods,sizeof(hMods),&amp;cbNeeded))<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ( i = 0; i &lt; (cbNeeded / sizeof(HMODULE)); i++ )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char szModName[MAX_PATH];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GetModuleFileNameEx(hProcess,hMods,szModName,sizeof(szModName)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\t%s (0x%08X)\n", szModName, hMods );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>}</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">CloseHandle( hProcess );<br/>}</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">BOOL ListProcess()<br/>{<br/>HANDLE hProcessSnap = NULL;<br/>PROCESSENTRY32 pe32 = {0};<br/>BOOL bRet = FALSE;</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);<br/>if(hProcessSnap == INVALID_HANDLE_VALUE)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">pe32.dwSize = sizeof(PROCESSENTRY32);<br/>if(Process32First(hProcessSnap,&amp;pe32))<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _tprintf(TEXT("\rProcess\t\tPRIV\tPID\tTHREADS\t PATH\n"));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HMODULE hModule;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCHAR szPath[MAX_PATH];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD cbNeeded;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE hProcess = NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,pe32.th32ProcessID);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EnumProcessModules(hProcess,&amp;hModule,sizeof(HMODULE),&amp;cbNeeded);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetModuleFileNameEx(hProcess,hModule,szPath,sizeof(szPath));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _tprintf(TEXT("\r%-17s%-8d%-8d %-8d%s\n"),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pe32.szExeFile,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pe32.pcPriClassBase,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pe32.th32ProcessID,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pe32.cntThreads,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szPath);<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListModules(pe32.th32ProcessID);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hProcess);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hModule);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }while(Process32Next(hProcessSnap,&amp;pe32));<br/>}<br/>else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _tprintf(TEXT("Process32First() Error\n"));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br/>CloseHandle(hProcessSnap);<br/>return TRUE;<br/>}</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">void main(void)<br/>{<br/>ListProcess();<br/>}<br/></font></p>
<p><font color="#ff0000">///////////////////////////////////////////////////*&nbsp;&nbsp; pskill.cpp&nbsp;&nbsp; *////////////////////////////////////////////////////////////</font><br/>#include &lt;windows.h&gt;<br/>#include &lt;tlhelp32.h&gt;<br/>#include &lt;stdio.h&gt;</p>
<p>BOOL SetPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL bRet = FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LUID luid;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TOKEN_PRIVILEGES tp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = LookupPrivilegeValue(NULL,lpszPrivilege,&amp;luid);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!bRet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bRet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp.PrivilegeCount = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(bEnablePrivilege)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp.Privileges[0].Attributes = NULL;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = AdjustTokenPrivileges(hToken,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FALSE,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;tp,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sizeof(TOKEN_PRIVILEGES),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PTOKEN_PRIVILEGES)NULL,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PDWORD)NULL);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!bRet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bRet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return TRUE;<br/>}</p>
<p>BOOL KillProcess(DWORD PID)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE hProcess = NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE hToken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bKilled = FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = FALSE;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&amp;hToken);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!bRet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bRet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = SetPrivilege(hToken,SE_DEBUG_NAME,TRUE);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!bRet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bRet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!hProcess)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bRet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = TerminateProcess(hProcess,1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!bRet)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bRet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bKilled = TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hToken);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hProcess);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bKilled;<br/>}</p>
<p>int main(int argc, char **argv)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(argc!=2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Usage: %s PID\n",argv[0]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!KillProcess(atoi(argv[1])))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("The Process Can not Be Killed\n");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br/>}</p>
<p> 最近打算编一个程序实现通过已知进程名获取其进程PID,进而获得该进程当前句柄,再调用TerminalProcess函数终止该进程</p>
<p>如果是结束一个系统进程的话,那还需要先提权,从网上找到pslist+pskill的范例代码,编译老报错:</p>
<p>d:\pslist\pslist.cpp(110) : fatal error C1010: unexpected end of file while looking for precompiled header directive<br/>Error executing cl.exe.</p>
<p><font color="#3366ff">经过进一步搜索才知道要在CPP文件中加入#include &lt;stdafx.h&gt;</font></p>
<p><font color="#3366ff">加入此代码后编译pslist还是报错找不到psapi.h文件,再从网上下载了psapi文件才编译成功</font></p>
<p><font color="#3366ff">psapi下载地址:<a href="http://www.xinyitech.com/software/psapi.rar">http://www.xinyitech.com/software/psapi.rar</a></font></p>
<p><a href="http://wow.21bird.com/PSAPI.rar">http://wow.21bird.com/PSAPI.rar</a><br/></p> zDRIojOt.rar (2.28 KB, 下载次数: 22276) <br/>
[此贴子已经被作者于2009-7-20 22:57:00编辑过]
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-7-21 00:40:50 | 显示全部楼层
阿杰辛苦了!!
我就是嗷嗷叫的老马了......

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

 楼主| 发表于 2009-7-22 19:54:02 | 显示全部楼层
为人民服务!
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

1

主题

12

回帖

0

精华

初来乍到

积分
22
发表于 2010-1-26 11:43:51 | 显示全部楼层
来驱动版的,呵呵 !
只可惜 加载驱动,人家不愿意呀!

0

主题

8

回帖

0

精华

初来乍到

积分
0
发表于 2010-4-28 11:33:08 | 显示全部楼层
呵呵,还可以啊

0

主题

20

回帖

0

精华

初来乍到

积分
0
发表于 2010-7-21 20:30:31 | 显示全部楼层
学习了,这个win7有没有用?
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表