关于 TerminateProcess函数 在c++的进程中的学习而发现VS2008的编译安全问题
关于 TerminateProcess函数 在c++的进程中的学习
之前一段时间自己的机器总是有一些用不到的进程随机器启动,查了启动项没有发现(不过现在已经知道是在“服务”里面)。而碰巧刚学了c++的windows程序设计,就想自己写个程序,将自己每次相关掉的进程名称都写进去,每次运行下就可以关掉。
看了下书上的代码,已经有了差不多的代码了,一个是列出进程的列表的,一个是通过进程的ID来结束进程。因为考虑到进程ID的随机性,就想通过进程名称的对比,再找出PID来进行进程的结束工作。
根据书上的例子,将第一个列进程的代码拿出来用,可以列出进程。书上用的是Process32First 和一个Process32Next的一个循环。
到了第二步,先将书上的通过PID来结束进程的代码,运行发现不能按要求,来运行,可是到了学校的机房,却可以运行,学校机房用的是VC6.0的编译器,而我用的VS2008 。难道这个和平台有关?
查了MSdn文档说是要
Client |
Requires Windows |
Server |
Requires Windows Server 2008, Windows Server 2003, Windows 2000 Server, or Windows NT Server. |
Header |
Declared in Winbase.h; include Windows.h. |
Library |
Use Kernel32.lib. |
DLL |
Requires Kernel32.dll. |
|
|
查看了我的VS 的设置,里面是有Kernel.lib。
问题也就一直得不到解决了,尝试了设断点的调试,发现它在前一步::OpenProcess
这里就没有正常的运行了,无论填入何种进程ID 一律返回0 。
看来是这个OpenProcess的问题。(后来)
带着疑问,我要在机房的VC6.0 下面做了调试,可依然是可以成功的结束掉指定的进程的。那么结果只有一种—VS2008 安全性较高,一些对进程的操作,它不会让你随便运行。
可是又有新疑问了,那么想要突破这个安全的防线 我该怎么做呢?
敬请期待自己的下一步的突破。(突破VS的进程操作安全防线)
下面附代码下载实验代码