创建一个进程

知识点:

   创建一个进程需要用到CreateProcess函数,其在MSDN的描述如下:

The CreateProcess function creates a new process and its primary thread. The new process runs the specified executable file in the security context of the calling process.  

  即这个函数创建了一个新进程和它的主线程。这个新进程在安全环境中调用进程时运行指定的可执行文件。

  这个函数的定义如下:

  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   进程信息
);

 

各个参数具体设置如下:

1、lpApplicationName:  指向一个字符串选定可执行模块。这个字符串可以是可执行文件的全路径,或者是一部分名字。在一部分名字的情况下,函数会用当前的驱动器和当前的目录来完成指向。如果这个参数是NULL,这个模块名字是第一个被命令行参数限定空间的字符串

2、lpCommandLine:这个参数是NULL时,函数会用第一个参数,即lpApplicationName指定的字符串作为命令行参数

3、lpProcessAttributes:指向一个SECURITY_ATTRIBUTES结构体,来决定返回的句柄是否被子进程继承。如果这个参数设置为NULL, 

                                     那将不能被继承。

4、lpThreadAttributes:同上,只是来决定主线程是否被继承,为NULL时将不能被继承

5、bInheritHandles:指出新的进程是否会继承当前的进程的句柄。如果是TRUE,则可。反之为FALSE。

6、dwCreationFlags:指向用来控制优先权类和创建进程的标志。值有很多,具体参看MSDN,这里用的是CREATE_NEW_CONSOLE,

                                说明进程有新的控制台,而不是继承父进程。

7、lpEnvironment:如果这个参数为NULL,那么就会用当前进程的环境

8、lpCurrentDirectory:如果这个参数为NULL,那么就会用当前进程的驱动和目录

9、lpStartupInfo:Pointer to a STARTUPINFO structure that specifies how the main window for the new process

                            should appear

10、lpProcessInformation:Pointer to a PROCESS_INFORMATION structure that receives identification information 

                                         about the new process. 

 

   STARTUPINFO结构体的具体参数参照MSDN,本例中,用了其中的俩个参数。dwFlags 和 wShowWindow。第一个参数用来指定有效性,第二个则是指定窗口是否显示。

  而PROCESS_INFORMATION结构体:

   typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;   新建进程内核句柄
    HANDLE hThread;    新建进程主线程句柄
    DWORD dwProcessId;    新建进程ID
    DWORD dwThreadId;    新建进程主线程ID
} PROCESS_INFORMATION;

 

关于ID号:当一个进程对象创建以后,系统会为一个内核对象分配一个唯一ID号,在系统中不会再有其他内核对象的ID号与此相同。

 

关闭句柄可以用CLoseHandle()函数,参数是要关闭的句柄.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值