CreateProcess函数创建一个独立于创建过程运行的新进程。然而,为了简单起见,该关系被称为父子关系。
以下代码片段演示了如何创建一个进程。
void main(VOID)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
//启动子进程。
if( !CreateProcess( NULL, //没有模块名称(使用命令行)。
"MyChildProcess", // 命令行。
NULL, //处理句柄不可继承。
NULL, //线程句柄不可继承。
FALSE, //将句柄继承设置为FALSE。
0, //没有创建标志。
NULL, //使用父级的环境块。
NULL, //使用父级的起始目录。
&si, //指向STARTUPINFO结构的指针。
&pi ) //指向PROCESS_INFORMATION结构的指针。
)
ErrorExit( "CreateProcess failed." );
//等待,直到子进程退出。
WaitForSingleObject( pi.hProcess, INFINITE );
//关闭进程和线程句柄。
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
如果CreateProcess成功,它返回一个PROCESS_INFORMATION结构,其中包含新进程及其主线程的句柄和标识符。使用完整的访问权限创建线程和进程句柄,但如果指定安全描述符,则可以限制访问。当您不再需要这些手柄时,请使用CloseHandle功能关闭它们。
您还可以使用CreateProcessAsUser功能创建一个进程。此函数允许您指定进程将执行的用户帐户的安全上下文。