创建流程

【勇芳软件工作室】汉化HomePreviousNext

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功能创建一个进程。此函数允许您指定进程将执行的用户帐户的安全上下文。