匿名管道

匿名管道是一個未命名的、單向管道,一般用來在一個父進程和一個子進程之間傳輸數據;匿名管道只能實現本地機器上兩個進程間的通訊,而不能實現跨網絡的通訊;安全

一、建立匿名管道網絡

  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;

相關文章
相關標籤/搜索