以挂起的方式创建进程

用CreateProcess函数可以创建一个进程;
正常情况下CreateProcess做以下事情:创建一个进程的内核对象、给进程分配一个4GB的空间、加载pe:包括exe、dll、修复dll、创建主线程,把程序入口地址交给EIP

如果参数dwCreationFlags传入CREATE_SUSPENDED将以挂起的方式创建进程;
以这种方式创建的进程只有一个壳;也就是进程的主线程没有开始运行;
需要调用函数让进程的主线程恢复执行:
ResumeThread(ie_pi.hThread);
1)已挂起方式打开进程实例
例如:以挂起方式打开notpad++

#include<stdio.h>
#include<windows.h>
 
int main(int argc, char* argv[]){
    TCHAR szAppName[256] = TEXT("D:\\Program Files\\Notepad++\\notepad++.exe");
    STARTUPINFO si = {0};    //程序启动设置
    si.cb = sizeof(si);    //只需要传递结构大小即可
    PROCESS_INFORMATION pi;    //记录进程句柄信息等
    ::CreateProcess(
        NULL,
        szAppName,
        NULL,
        NULL,
        FALSE,
        CREATE_SUSPENDED,
        NULL,
        NULL,
        &si,
        &pi
    );
    //恢复主进程
    //::ResumeThread(pi.hThread);
    return 0;
}

当没有恢复主进程时,notepad++没有运行;
但任务管理器中可以看到notpad++的进程,只不过占内存比正常运行小,因为主线程根本没运行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值