在Windows中,CreateProcess函数用于创建新进程。
使用CreateProcess函数需要包含Windows.h头文件,并且函数原型如下:
BOOL CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
下面是对参数的解释:
下面是一个使用CreateProcess函数创建一个新进程的示例:
#include <Windows.h>
#include <iostream>
int main() {
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 使用CreateProcess函数创建新进程
if (!CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
std::cout << "CreateProcess failed: " << GetLastError() << std::endl;
return 1;
}
// 等待新进程结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
在上面的示例中,我们使用CreateProcess函数创建一个新的Notepad进程。首先,我们定义了一个STARTUPINFO结构体和一个PROCESS_INFORMATION结构体,然后通过ZeroMemory将这两个结构体的内存清零。接下来,我们调用CreateProcess函数来创建新的Notepad进程。如果CreateProcess函数调用成功,它将返回一个非零值,并且新进程的句柄和线程句柄将保存在PROCESS_INFORMATION结构体中。我们可以使用WaitForSingleObject函数来等待新的进程结束,然后通过CloseHandle函数关闭进程和线程句柄。
需要注意的是,CreateProcess函数有一个宽字符版本CreateProcessW和一个窄字符版本CreateProcessA。在上面的示例中,我们使用了CreateProcessA函数来创建新进程,这表示我们使用的是窄字符(ASCII)版本。如果需要使用宽字符(Unicode)版本,请使用CreateProcessW函数,并将相关参数的类型更改为宽字符版本。