在挂起的进程中创建一个远程线程
2014-11-21 15:18
351 查看
以挂起状态创建一个进程
在该进程中创建一个远程线程
如果在恢复主线程之前,远程线程退出了,程序就会退出或没有界面(XP下会有这个问题,WIN7不会出现)。
查阅各种资料,主要有如下两种看法:
1)有人说可能是远程线程调用了某些API,而进程是以挂起状态创建的,还没有初始化,这样就会有问题,经测试,
这种说法是不正确的,启动远程线程时,进程会加载所有模块,正常初始化。
2)还有人说进程是以挂起状态创建的,当执行远程线程时,进程会把远程线程作为它的“主线程”,为它初始化环境,
如果在退出远程线程前,没有恢复进程的主线程,这时系统就会认为,进程的“主线程”退出了,而且没有其它线程运行,
进程也就不存在了,经测试,这种说法是正确的。所以解决方法是:远程线程中调用Sleep,等进程的主线程恢复之后再退出。
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,等进程的主线程恢复之后再退出。
相关文章推荐
- 代码注入(提升当前进程权限,创建远程线程)
- 进程注入DLL实现(APC和远程线程创建)
- 一个进程最多可以创建线程的数目
- 一个进程可以创建多少线程?
- 【深入Java开发】JVM源码分析之一个Java进程究竟能创建多少线程
- 一个进程最多可以创建线程的数目
- JVM源码分析之一个Java进程究竟能创建多少线程
- JVM源码分析之一个Java进程究竟能创建多少线程
- 实验:一个进程到底能创建多少线程?
- 实验:一个进程到底能创建多少线程?
- 如何在VC中利用系统函数创建一个新的线程
- vc创建一个线程的方法:
- 监视远程线程的创建
- 创建一个远程桌面连接的快捷方式
- 创建一个从数据库读入内容的远程对象
- 一个创建多个线程的实例
- 推荐一个线程进程(内部)通信框架--ThreadMessaging.NET
- ReaderWriterLock(定义支持单个写线程和多个读线程的锁),Mutex(一个同步基元,也可用于进程间同步。 )
- 挂起和恢复一个进程
- 推荐一个线程进程(内部)通信框架--ThreadMessaging.NET