CreateProcess函数略解

CreateProcess 函数的第一和第二参数在创造进程时具有较为复杂的规则,在这里做一下简略的记要(详见MSDN):
	BOOL CreateProcess( 
	  LPCWSTR pszImageName, 
	  LPCWSTR pszCmdLine, 
	  LPSECURITY_ATTRIBUTES psaProcess, 
	  LPSECURITY_ATTRIBUTES psaThread, 
	  BOOL fInheritHandles, 
	  DWORD fdwCreate, 
	  LPVOID pvEnvironment, 
	  LPWSTR pszCurDir, 
	  LPSTARTUPINFOW psiStartInfo, 
	  LPPROCESS_INFORMATION pProcInfo
	); 
      第1个参数:_in LPCWSTR pszImageName 指向的是程序完整的文件名包括路径(即绝对路径)或且调用这个API函数的程序所在的相对
路径。当这个参数不为NULL时,这函数不会使用搜索路径而直接返回。:这个参数指向程序时须包含扩展名,它不会自动为你加上扩展名。
    第2个参数:_in LPCWSTR pszCmdLine 指向的是一个类似于命令行命令的字符串。它会认为第一个空格前面的字符串是程序路径,空
格后面的为程序附加参数。如果第二个空格前的不是程序路径的话,他为再尝试第二个空格之前的路径,以此类推直到整个字符串径尝试完;给
予的字符串路径测试完后还无法启动程序时,还会根据几种规则去搜索路径直到返回。(详见MSDN) :这个参数会为每个空格前尝试执行
时加上".exe"扩展名;通常将文件名和程序参数附给第2个参数。
    第3个参数:_in LPSECURITY_ATTRIBUTES psaProcess 不支持,设为NULL。
   第4个参数:_in LPSECURITY_ATTRIBUTES psaThread 不支持,设为NULL 。
    第5个参数:_in BOOL fInheritHandles 是否继承父进程可继承的句柄。为TRUE时,继承父进程可继承的句柄,并具有相同的值和访问
权限。
    第6个参数:_in DWORD fdwCreate 如果只是纯粹的想创建一个子进程就设为0,(详见MSDN)。
    第7个参数:_in LPVOID pvEnvironment 环境块,如果为NULL,使用调用进程的环境块。具体目前自己也不明白(详见MSDN)。 
      第8个参数:_in LPWSTR pszCurDir 指定新进程的运行时的路径,如果不指定则新进程的运行路径为该函数调用程序所在的运行路径。
    第9个参数:_in LPSTARTUPINFOW psiStartInfo 指定新进程运行时窗口的一些数据信息。了解这一结构体详见MSDN。
   第10个参数:_out LPPROCESS_INFORMATION pProcInfo 进程信息结构体,包含新进程的ID和句柄,还有新进程的主进程的句
柄和ID。在父进程中必须调用CloseHandle()关闭PROCESS_INFORMATION 结构体的hProcess和hThread减少资源对象的使用计数。
以便在子进程退出时,安全的清理系统资源。

你可能感兴趣的:(CreateProcess函数略解)