Windows Mobile中如何实现OpenThread函数(挂起进程)

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:18:41
平台:Windows Mobile 6.0
我想挂起一个进程,现在已实现枚举一个进程所有的线程的功能,得到的是线程ID。
然后调用OpenThread 得到线程句柄,接下来SuspendThread挂起线程;
以达到挂起进程的目的。

我查过MSDN OpenThread这个函数要到WinCE 6.0及以后版本才会支持。
而Windows Mobile 6.0是基于WinCE 5.2内核的。

--------------------------------------------------------------------------

另外我找到一篇文章:OpenThread种种
http://www.cnblogs.com/singlerace/archive/2009/01/13/1311829.html

它的原理是 把TDB伪装成PDB,然后利用OpenProcess实现OpenThread的功能
可是我在模拟器上测试无效!

以下是测试结果
==================
在SP 5.0 测试:执行h2p 时程序崩溃,异常退出。
在PPC 2003 下:这更强,,模拟器异常关闭,并且我的VS 2005 也无响应,只能结束进程。。
在PPC 6.1 下:const_cast<CINFO*>(phd->pci)->type = SH_CURPROC; //这句执行完没有异常,但是修改无效。这个type值改不了。
==================

其实我就是想实现挂起一个进程的功能(并且可以随时恢复),请问如何做呀?

微软对Windows Mobile 6.0内核都没有提供获得线程句柄的方法,想实现的难度可想而知。

加上微软对核心代码安全的严密控制,应该是实现不了了。

还有这篇文章里采用的欺骗手段。我有点质疑。不知道文章的作者做过测试没有。
我的疑问:
首先进程和线程定义的结构都不一样。
其次,即使结构很相似,内核会通过传进来的IDThread查找相关进程。想必内核查找的范围只会局限于进程列表里,怎么查也查不到线程里吧。
最后,即使的即使,神话般的获得了线程句柄。这属于漏洞,就象XP的漏洞,微软会贴上膏药,写上:漏洞补丁。

水平有限。可能我理解有错误。

..........................好专业啊。

嗯不知道你想挂起这个进程干什么用,其实好多时候我们可以换个思维的,你是在等到特定的事件发生的时候再实现进程的继续运行吗?你可以考虑使用WaitForMultipleObjects()这个函数试试,仔细研究一下子吧,最近我也正在看这些东西呢,祝你好运