《简单任务管理器》由会员分享,可在线阅读,更多相关《简单任务管理器(9页珍藏版)》请在金锄头文库上搜索。
1、用C语言实现,西安电子科技大信安协会 龚潇,简单任务管理器,西安电子科技大信安协会 龚潇,主函数 参数argc/argv,列出进程名和PID 函数GetProcess(void),结束选定的进程 函数KillProcess(int pid),调用CreateToolhelp32Snapshot 函数得到系统所有进程快照,调用Process32First和 Process32Next函数得到每个 进程的名字和PID,调用CloseHandle函数关闭系统 进程快照,封装GetKillPriv()函数进行提权,调用OpenProcess函数打开需要 结束的进程的句柄,调用TerminateProc
2、ess函数结束 我们需要结束的进程,1.主函数,西安电子科技大信安协会 龚潇,主函数main(int argc,char *argv) 不必多说了,argc表示参数个数,argv0是文件名,argv1表示传入的第一个参数 我们可以利用一个判断句, if(argc=2 & strcmp(argv1,“list“)=0) 进入我们GetProcess里。 或者if(argc=3 & strcmp(argv1,“kill“)=0)进入KillProcess里。 注意,字符串想比较大小得用strcmp函数,不能直接用argv1=“kill“来比较。,2.GetProcess函数,西安电子科技大信安协会
3、 龚潇,这个函数没有参数。作用是得到系统所有正在运行的进程快照。 先定义一个句柄变量hProcessSnap,则hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); TH32CS_SNAPPROCESS指定了进程快照类型,一般都是这个参数。0代表获取系统所有进程快照。 我们再定义一个BOOL类型变量bProcess,使 bProcess=Process32First(hProcessSnap,大家可以去MSDN上查找PROCESSENTRY32的定义),2.GetProcess函数,西安电子科技大信安协会 龚潇,while(b
4、Process) wprintf(L“%s-%dn“,pe32.szExeFile,pe32.th32ProcessID); bProcess=Process32Next(hProcessSnap, 当bProcess=TRUE时,说明获取快照成功了。就需要将获取的信息打印出来。pe32.szExeFile是进程名,pe32.th32ProcessID是进程PID。我们只需要这两项。输出即可。 直到bProcess=FALSE了,说明进程列举完了,我们的while语句也不执行了。 注意,因为我们的pe32.szExeFile是TCHAR类型,被宏解释成wchar_t类型(程序使用unicode
5、编码),所以需要用到wprintf输出字符串。,3.KillProcess函数,西安电子科技大信安协会 龚潇,刚才列举出了系统所有进程,如果我们想kill掉一个进程,就需要进入我们这个函数。 函数有一个参数:Pid,我们需要结束进程的PID。 我们需要定义一个句柄变量hProcess hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid); 意思是打开Pid进程,有对它进行所有操作的权限(PROCESS_ALL_ACCESS),进程句柄不可继承(FALSE),返回该进程句柄。若失败则返回NULL。,3.KillProcess函数,西安电子科技大信安
6、协会 龚潇,最后一个函数,结束进程的函数。 TerminateProcess(hProcess,0); 参数是刚才返回该进程的句柄hProcess,后面的0是进程退出时的代码。一般都是0. 这个函数返回值是BOOL,成功为TRUE。 我们所有的程序也就只有这几个函数,如果去掉那些判断函数是否正确运行的if语句,程序的代码其实很短。,4.提权函数,西安电子科技大信安协会 龚潇,如果在NT之前的系统我们这个程序就能正常运行了。但NT以后的系统执行KillProcess之前我们还需要提权。 之前我也不是很清楚提权这个事,运行程序以后发现可以列出进程,但不能结束进程。 记得以前看书上介绍编写开关机的函
7、数需要提权,我才想到这个程序是否也要提权。 这里就不讲提权的那几个API函数了,网上都有封装好的提权函数,我们可以直接拿来用。 我们这个程序需要SE_DEBUG_NAME权限,以前做的开关机程序需要的是SE_SHUTDOWN_NAME权限,只需要在封装的提权函数里将这个参数更改,使之可以得到不同权限。,5.总结,西安电子科技大信安协会 龚潇,我简单的介绍了制作一个“任务管理器”的需要的步骤和用到的函数。 因为是命令提示符下的程序,没有界面,我们可以在cmd下运行它。(我们还能用快捷方式运行,但不如在cmd下直观) 这一个星期我对进程编程有了一定的了解,并通过自己的努力克服了许多困难成功编译了taskmanager.exe这个程序,完成了预定的任务。 我用到的资料有MSDN和几个PDF文档,“WINDOWS特权、权限介绍.pdf”,“Windows_API编程入门教程.pdf” ,还有一些网上的文章、教程。,