CreateProcess
创建一个新进程及主线程。新进程在调用进程的安全上下文中运行;
函数声明
1 | WINBASEAPI |
参数
lpApplicationName
要执行的模块的名称。lpApplicationName
参数可以是NULL
, 要运行批处理文件, 必须启动命令解释程序, 并将lpApplicationName
设置成cmd.exe
;
lpCommandLine
要执行的命令行。lpCommandLine
的参数可以是NULL
, 在这种情况下, 该函数使用由lpApplicationName
指向的字符串作为命令行。如果lpApplicationName
和lpCommandLine
都不为NULL
, 则由lpApplicationName
指向的以空字符串结尾的字符串会指定要执行的模块, 并且由lpCommandLine
指向的以空字符串结尾的字符串会指定命令行;
lpProcessAttributes
指向SECURITY_ATTRIBUTES
结构的指针, 用于确定是否可以由子进程继承返回新进程对象的句柄。如果lpProcessAttributes
为NULL
, 则不能继承句柄;
lpThreadAttributes
指向SECURITY_ATTRIBUTES
结构的指针, 用于确定是否可以由子进程继承返回的新线程对象的句柄。如果lpThreadAttributes
为NULL
, 则不能继承句柄;
bInheritHandles
如果此参数为TRUE
, 则调用进程中的每个可继承句柄都将由新进程来继承。如果该参数为FALSE
, 则不会继承句柄;
dwCreationFlags
控制优先级和创建进程的标志。例如, CREATE_NEW_CONSOLE
表示新进程将使用一个新控制台, 而不是继承父进程的控制台。CREATE_SUSPENDED
表示新进程的主线程会以暂停的状态来创建, 直到调用ResumeThread
函数时才运行;
lpEnvironment
指向新进程的环境块的指针。如果此参数为NULL
, 则新进程将使用调用进程的环境;
lpCurrentDirectory
指向进程当前目录的完整路径。该字符串还可以指定UNC
路径, 如果此参数为NULL
, 则新进程将具有与调用进程相同的当前驱动器和目录;
lpStartupInfo
指向STARTUPINFO
或STARTUPINFOEX
结构的指针。STARTUPINFO
或STARTUPINFOEX
中的句柄在不需要时必须由CloseHandle
关闭;
lpProcessInformation
指向PROCESS_INFOMATION
结构的指针。用于接收有关新进程的标识信息。PROCESS_INFOMATION
中的句柄必须在不需要时由CloseHandle
关闭;
返回值
如果函数成功, 则返回值非零;
如果函数失败, 则返回值为零;
代码示例
1 | STARTUPINFO si = { 0 }; |
使用事项-1
CreateProcess
着重注意5个参数: 执行模块名称的参数lpApplicationName
、执行命令行的参数lpCommandLine
、控制进程优先级和创建进程标志的参数dwCreationFlags
、指向STARTUPINFO
信息结构的参数lpStartupInfo
、以及指向PROCESS_INFOMATION
信息结构的参数lpProcessInformation
;
使用事项-2
CreateProcess
函数在指定窗口显示方式时, 需要在STARTUPINFO
结构体中将启用标志设置成STARTF_USESHOWWINDOW
, 表示wShowWindow
成员显示方式有效。然后将wShowWindow
设置为SW_HIDE
隐藏窗口, 创建方式为CREATE_NEW_CONSOLE
创建一个新控制台;