System() 启动进程,但使用 CreateProcess 失败?
System() to start a process, but using CreateProcess fails?
所以,奇怪的问题是,我正在尝试创建一个进程,然后恢复它,主要是探索 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);
出于某种原因,这在 "creates" 过程中大多数时候会引发 0xc0000142
错误,否则它就会失败。
怎么回事?
请参阅以下用于创建进程的 MSDN 示例代码:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx
您需要将 si
和 pi
结构归零,同时设置
si.cb = sizeof(si);
最后,关闭进程和线程句柄。
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
所以,奇怪的问题是,我正在尝试创建一个进程,然后恢复它,主要是探索 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);
出于某种原因,这在 "creates" 过程中大多数时候会引发 0xc0000142
错误,否则它就会失败。
怎么回事?
请参阅以下用于创建进程的 MSDN 示例代码: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx
您需要将 si
和 pi
结构归零,同时设置
si.cb = sizeof(si);
最后,关闭进程和线程句柄。
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);