阅读量:0
在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 );
下面是对参数的解释:
- lpApplicationName:(可选)要运行的可执行文件的名称。
- lpCommandLine:(可选)命令行参数。
- lpProcessAttributes:(可选)进程安全属性。
- lpThreadAttributes:(可选)线程安全属性。
- bInheritHandles:指示新进程是否继承父进程的句柄。
- dwCreationFlags:控制新进程的创建方式。
- lpEnvironment:(可选)新进程的环境变量。
- lpCurrentDirectory:(可选)新进程的当前工作目录。
- lpStartupInfo:启动信息结构体。
- 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函数,并将相关参数的类型更改为宽字符版本。