System()启动进程,但使用CreateProcess失败?

时间:2016-02-11 21:20:56

标签: c++ windows process

所以,好奇的问题,我正在尝试创建一个进程,然后恢复它,主要是探索Windows API。我注意到如果我这样做:

system("C:\\Windows\\System32\\calc.exe");

它将打开一个计算器exe,但是如果我尝试使用CreateProcessA做同样的事情,我会得到这个:

STARTUPINFO starting_info;
PROCESS_INFORMATION process_info;

// let's try and make a process
if (!CreateProcessA(NULL, "C:\\Windows\\System32\\calc.exe", NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &starting_info, &process_info)) {
    return;
}
// resume thread
NtResumeThread(process_info.hThread, NULL);

由于某种原因,这种情况在“创建”过程时大多数情况下会抛出0xc0000142错误,否则它就会失败。

发生了什么事?

1 个答案:

答案 0 :(得分:2)

请参阅以下用于创建进程的MSDN示例代码: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx

您需要将sipi结构清零,同时设置

si.cb = sizeof(si);

最后,关闭进程和线程句柄。

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);