码迷,mamicode.com
首页 > 编程语言 > 详细

在挂起的进程中创建一个远程线程

时间:2014-11-21 15:51:18      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   sp   div   问题   log   ad   as   

以挂起状态创建一个进程

invoke CreateProcess, NULL, szPath, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, addr @si, addr @pi

在该进程中创建一个远程线程

invoke CreateRemoteThread, hProcess, NULL, 0, eax, NULL, NULL, NULL

如果在恢复主线程之前,远程线程退出了,程序就会退出或没有界面(XP下会有这个问题,WIN7不会出现)。

查阅各种资料,主要有如下两种看法:

1)有人说可能是远程线程调用了某些API,而进程是以挂起状态创建的,还没有初始化,这样就会有问题,经测试,

这种说法是不正确的,启动远程线程时,进程会加载所有模块,正常初始化。

2)还有人说进程是以挂起状态创建的,当执行远程线程时,进程会把远程线程作为它的“主线程”,为它初始化环境,

如果在退出远程线程前,没有恢复进程的主线程,这时系统就会认为,进程的“主线程”退出了,而且没有其它线程运行,

进程也就不存在了,经测试,这种说法是正确的。所以解决方法是:远程线程中调用Sleep,等进程的主线程恢复之后再退出

在挂起的进程中创建一个远程线程

标签:style   blog   color   sp   div   问题   log   ad   as   

原文地址:http://www.cnblogs.com/luzhiyuan/p/4113015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!