匿名管道

匿名管道是一个未命名的、单向管道,一般用来在一个父进程和一个子进程之间传输数据;匿名管道只能实现本地机器上两个进程间的通讯,而不能实现跨网络的通讯;安全

一、建立匿名管道网络

  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;

相关文章
相关标签/搜索