匿名管道是一个未命名的、单向管道,一般用来在一个父进程和一个子进程之间传输数据;匿名管道只能实现本地机器上两个进程间的通讯,而不能实现跨网络的通讯;安全
一、建立匿名管道网络
BOOL CreatePipe(函数
PHANDLE hReadPipe, 命令行
PHANDLE hWritePipe, 线程
LPSECURITY_ATTRIBUTES lpPipeAttributes, 指针
DWORD nSize orm
);对象
hReadPipe:做为返回值,返回管道的读取句柄;继承
hWritePipe:做为返回值,返回管道的写入句柄;进程
lpPipeAttributes:一个指向SECURITY_ATTRIBUTES结构体的指针,检测返回的句柄可否被子进程继承;要在父进程和子进程间创建匿名管道,该参数就不能够设为NULL,子进程需继承父进程的管道句柄,须构造该结构体变量:
typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength; //指定该结构体的大小
LPVOID lpSecurityDescriptor; //NULL
BOOL bInheritHandle; //TRUE
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;
nSize:指定管道的缓冲区的大小;若是设为0,系统将使用默认的缓冲区大小;
二、一个进程的建立
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
lpApplicationName:指向一个字符串,用来指定可执行程序的名称,该名称能够是该程序的完整路径和文件名,也能够是部分名称;能够设为NULL,则文件名必须是lpCommandLine指向的字符串中的第一个空格界定的标记;
lpCommandLine:指向一个字符串,用来传递命令行的参数;一般在调用该函数时,将可执行文件名和命令行参数都传递给lpCommandLine参数;
lpProcessAttributes:指向SECURITY_ATTRIBUTES结构体的指针,用来设置新进程的进程对象的安全性,及指定未来建立的子进程是否能够继承该进程对象的句柄;能够设为NULL;
lpThreadAttributes:指向SECURITY_ATTRIBUTES结构体的指针,用来设置新进程的主线程对象的安全性,及指定未来建立的子进程是否能够继承该主线程对象的句柄;能够设为NULL;
bInheritHandles:该参数用来指定建立的子进程是否可以继承父进程的对象句柄;
dwCreationFlags:指定控件优先级类和进程建立的附加标记;若是只是为了启动子进程,并不须要设置它建立的标记,可设为0;
lpEnvironment:一个指向环境块的指针;设为NULL,新进程将使用调用进程的环境;
lpCurrentDirectory:指定子进程当前的路径,必须是完整的路径名;若是设为NULL,则新进程将与调用进程拥有相同的驱动器和目录;
lpStartupInfo:一个指向STARTUPINFO结构体的指针,用来指定新进程的主窗口将如何显示;
lpProcessInformation:做为返回值使用,是一个指向PROCESS_INFORMATION结构体的指针,用来接收关于新进程的标识信息;
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess; //新建立的进程的句柄
HANDLE hThread; //新建立的进程的主线程的句柄
DWORD dwProcessId; //标识一个进程
DWORD dwThreadId; //标识一个线程
} PROCESS_INFORMATION;