CreateProcess
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information);
此结构体一点要清零,否则成员间包含主线程堆栈上的垃圾数据
typedef struct _STARTUPINFO {
DWORD cb; //初始化为sizeof(STARTUPINFO) 版本控制
LPTSTR lpReserved; //保留 必须初始化为null
LPTSTR lpDesktop; //启动应用程序的桌面名称 windows 有很多桌面切换
LPTSTR lpTitle; //控制台下可用,制定控制台的窗口标题
DWORD dwX; //屏幕的位置
DWORD dwY; //屏幕的位置
DWORD dwXSize; //屏幕的宽度
DWORD dwYSize; //屏幕的高度
DWORD dwXCountChars; //控制台下可用,控制台的宽度
DWORD dwYCountChars; //控制台下可用,控制台的高度
DWORD dwFillAttribute; //控制台下可用,控制台的文本和背景色
DWORD dwFlags; //组合值
WORD wShowWindow; //窗口可用,窗口如何显示
WORD cbReserved2; //保留
LPBYTE lpReserved2; //保留
HANDLE hStdInput; //设置标准输入
HANDLE hStdOutput; //设置标准输出
HANDLE hStdError; //设置标准错误输出
} STARTUPINFO, *LPSTARTUPINFO;
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess; //启动的进程句柄
HANDLE hThread; //启动的线程句柄
DWORD dwProcessId; //PID
DWORD dwThreadId; //TID
} PROCESS_INFORMATION;