小结一下三个结构体的相互作用:
SECURITY_ATTRIBUTES sa1, sa2;
HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;
SA1.bInheritHandle = true;//设置继承
CreatePipe(&hReadPipe1,&hWritePipe1,&sa1,0);
STARTUPINFO si;
si.hStdInput = hReadPipe2;
si.hStdOutput = si.hStdError = hWritePipe1;
PROCESS_INFORMATION pi;
ret=CreateProcess(NULL,cmdLine,NULL,NULL,1,0,NULL,NULL,&si,&pi);
1.SECURITY_ATTRIBUTES存放一个对象的安全描述符并指定是否继承返回的句柄
作用: 建立管道
CreatePipe(&hReadPipe1,&hWritePipe1,&sa1,0);
2.PROCESS_INFORMATION返回有关新进程及其主线程的信息
作用:建立进程
CreateProcess(NULL,cmdLine,NULL,NULL,1,0,NULL,NULL,&si,&pi);
3.STARTUPINFO指定新进程的主窗口特性
作用:把管道和进程连接起来,中介型人物
si.hStdInput = hReadPipe2;
si.hStdOutput = si.hStdError = hWritePipe1;
从前有一个叫si的玛丽的管道工,她有很多特性红帽子,牛仔,带着一些用sa做的管道,用CreateProcess工具和pi材料为世界修建管道,可惜管道只能允许她通过
PROCESS_INFORMATION 结构
在创建进程时相关的数据结构之一,该结构返回有关新进程及其主线程的信息。其结构定义如下。
typedef struct_PROCESS_INFORMATION{
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
}PROCESS_INFORMATION;
其中成员含义如下。
① hProcess:返回新进程的句柄。
② hThread:返回主线程的句柄。
③ dwProcessId:返回一个全局进程标识符。该标识符用于标识一个进程。从进程被
创建到终止,该值始终有效。
④ dwThreadId:返回一个全局线程标识符。该标识符用于标识一个线程。从线程被创
建到终止,该值始终有效。
STARTUPINFO结构
该结构用于指定新进程的主窗口特性。STARTUPINFO 结构定义如下。
typedef struct_STARTUPINFO
{
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserverd2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
}STARTUPINFO,*LPSTARTUPINFO;
其中成员含义如下。
① cb:指定该结构大小。
② lpReserved:保留,置为NULL。
③ lpDesktop:指定一个字符串,包括该进程的桌面名或窗口位置名。
④ lpTitle:指定控制台进程创建的新控制台窗口标题。
⑤ dwX,dwY:指定新窗口左上角的x 和y 偏移量(以像素为单位)。如果dwFlags 成员
未指定STARTF_USEPOSITION 标志,则忽略这两项。
⑥ dwXSize,dwYSize:指定新窗口的宽度和高度。如果dwFlags 成员未指定
STARTF_USESIZE 标志,则忽略这两个成员。
⑦ dwXCountChars,dwYCountChars:指定新控制台窗口的屏幕缓冲区的宽度和高度。
如果dwFlags 成员未指定STARTF_USECOUNTCHARS 标志,则忽略这两成员。
⑧ dwFillAttribute:指定新控制台窗口的初始文字和背景颜色。如果dwFlags 成员未
指定STARTF_USEFILLATTRIBUTE 标志,则忽略该成员。
⑨ dwFlags:创建窗口标志。
⑩ wShowWindow:新窗口的显示状态。如果dwFlags 成员未指定STARTF_
USESHOWWINDOWW 标志,则忽略该成员。
cbReserved2:保留,必须置为0。
lpReserved2:保留,必须置为NULL。
hStdInput:指定一个句柄,该句柄用作进程的标准输入句柄。如果dwFlags 成员未
指定STARTF_USESTDHANDLES 标志,则忽略该成员。
hStdOutput:指定一个句柄,该句柄用作进程的标准输出句柄。如果dwFlags 成员
未指定STARTF_USESTDHANDLES,则忽略该成员。
hStdError:指定一个句柄,该句柄用作进程的标准错误句柄。如果dwFlags 成员未
指定STARTF_USESTDHANDLES,则忽略该成员。
SECURITY_ATTRIBUTES 结构
该结构存放一个对象的安全描述符并指定是否继承返回的句柄。
SECURITY_ATTRIBUTES 结构定义如下。
typedef struct_SECURITY_ATTRIBUTES{
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
}SECURITY_ATTRIBUTES
其中成员含义如下。
① nLength:指定该结构大小。
② lpSecurityDescriptor:指向一个对象的安全描述符,该安全描述符控制对象的共享。
如果该成员置为NULL,则该对象使用调用进程的默认安全描述符。
③ bInheritHandle:指定新进程被创建时是否继承返回的句柄。若该成员置为TRUE,
则新进程继承该句柄。