进程的创建

作者: Asura_Luo | 来源:发表于2018-05-04 02:38 被阅读0次

进程的创建

进程的启动过程

  1. 打开目标exe的映象文件
  2. 创建进程内核对象
  3. 映射NTDLL到内存
  4. 创建线程内核对象
  5. 通知子系统对进程进行管理
  6. 启动线程初始化空间和加载其他DLL
  7. 跳转到入口处开始执行

CreateProcess api


BOOL CreateProcess(
  LPCTSTR lpApplicationName,                 // name of executable module
  LPTSTR lpCommandLine,                      // command line string
  LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // SD
  BOOL bInheritHandles,                      // handle inheritance option
  DWORD dwCreationFlags,                     // creation flags
  LPVOID lpEnvironment,                      // new environment block
  LPCTSTR lpCurrentDirectory,                // current directory name
  LPSTARTUPINFO lpStartupInfo,               // startup information
  LPPROCESS_INFORMATION lpProcessInformation // process information
);


//中文版注释
BOOL CreateProcess(
  LPCTSTR lpApplicationName,                 // 可执行模块名称 (全路径 必须是const字符串
  LPTSTR lpCommandLine,                      // 命令行�(字符串 可以不是const字符串
  LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全描述符
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // 线程描述符
  BOOL bInheritHandles,                      // 继承标志位
  DWORD dwCreationFlags,                     // 创建标志位 (指定控制优先级和创建过程的额外标志,除了如前说,可以在任何组合中指定下列创建标标志
  LPVOID lpEnvironment,                      // 进程环境块
  LPCTSTR lpCurrentDirectory,                // 驱动目录
  LPSTARTUPINFO lpStartupInfo,               // 启动信息 指向一个窗体结构,该接口体表示新进程的窗口应该如何出现
  LPPROCESS_INFORMATION lpProcessInformation // 进程信息
);

//启动信息参数的结构体

typedef struct _STARTUPINFO { 
    DWORD   cb;     //记录指定结构体大小,以字节为单位
    LPTSTR  lpReserved; 
    LPTSTR  lpDesktop; 
    LPTSTR  lpTitle;  //对于控制台进程,日过创建了新的控制欲窗口,则会显示标题栏中的标题,如果NULL。可执行文件额名称将会用作窗口标题, This parameter must be NULL for GUI or console processes that do not create a new console window. 
    DWORD   dwX;  //控制窗口位置x
    DWORD   dwY;  //控制窗口位置y
    DWORD   dwXSize; //控制窗口宽度
    DWORD   dwYSize; //控制窗口高度
    DWORD   dwXCountChars; 
    DWORD   dwYCountChars; 
    DWORD   dwFillAttribute; 
    DWORD   dwFlags; 
    WORD    wShowWindow; //窗口显示方式
    WORD    cbReserved2; 
    LPBYTE  lpReserved2; 
    HANDLE  hStdInput; 
    HANDLE  hStdOutput; 
    HANDLE  hStdError; 
} STARTUPINFO, *LPSTARTUPINFO; 

//进程信息结构体

typedef struct _PROCESS_INFORMATION { 
    HANDLE hProcess; //进程句柄
    HANDLE hThread;  //主线程句柄
    DWORD dwProcessId; //被创建的进程id
    DWORD dwThreadId; //被创建的主线程ID
} PROCESS_INFORMATION; 


exp: 启动qq

#include "stdafx.h"
#include <windows.h>

int main()
{
    STARTUPINFO start_info = { 0 };
    start_info.cb = sizeof STARTUPINFO;

    PROCESS_INFORMATION process_info = { 0 };
    CreateProcess(
        L"C:\\Windows\\System32\\notepad.exe",
        NULL,
        NULL,
        NULL,
        FALSE,
        0,
        NULL,
        NULL,
        &start_info,
        &process_info
    );

    return 0;
}

SetHandleinfomation函数

相关文章

  • 进程操作

    一、进程创建 进程树 父进程创建若干子进程,子进程再创建其子进程,依次类推,构成进程树。进程的调度,其实就是在进程...

  • 操作系统:进程状态

    进程的创建 允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的...

  • 进程产生

    用系统调用创建进程 先创建一个文件process.c,封装通用的创建进程逻辑。 fork创建子进程,父进程和子进程...

  • 进程

    创建子进程 循环创建N个子进程 回收子进程 守护进程

  • Python - 多任务

    一、进程 1、multiprocessing.Process创建进程 2、使用Pool进程池创建进程 3、进程间的...

  • python基础篇大合集,进程、装饰器、列表详解篇!

    进程以及状态 1. 进程 2. 进程的状态 进程的创建-multiprocessing 1. 创建进程 2. 进程...

  • 进程api与控制

    进程创建 进程创建示例代码: 代码示例 用父进程创建N个子进程: 进程共享 父子进程之间在fork后。有哪些相同,...

  • 进程管理(一)进程操作

    进程创建 、进程执行映像和加载、进程运行(进程调度)、进程间的互斥与同步、进程间通信、进程终止 1、进程创建 PC...

  • 进程内核栈、用户栈

    1.1. 进程的堆栈 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会...

  • Linux内核简述

    进程 创建 创建进程用fork()函数。fork()为子进程创建新的地址空间并且拷贝页表。子进程的虚拟地址空间...

网友评论

    本文标题:进程的创建

    本文链接:https://www.haomeiwen.com/subject/wgyrrftx.html