共用方式為


遺產

子進程可以從其父進程繼承數個屬性和資源。 您也可以防止子進程從其父進程繼承屬性。 可以繼承下列專案:

  • 開啟 CreateFile 函式所傳回的句柄。 這包括檔案、控制台輸入緩衝區、控制台螢幕緩衝區、命名管道、序列通訊裝置和mailslots的句柄。
  • 開啟句柄來處理、線程、mutex、事件、旗號、命名管道、匿名管道和檔案對應物件。 CreateProcessCreateThreadCreateMutexCreateEventCreateSemaphoreCreateNamedPipeCreatePipeCreateFileMapping 函式。
  • 環境變數。
  • 目前目錄。
  • 除非進程已中斷連結或建立新的控制台,否則主控台。 子控制台進程也可以繼承父系的標準句柄,以及存取輸入緩衝區和使用中畫面緩衝區。
  • 錯誤模式,如 SetErrorMode 函式所設定。
  • 處理器親和性遮罩。
  • 與作業的關聯。

子進程不會繼承下列專案:

繼承句柄

子進程可以繼承其父代的一些句柄,但不能繼承其他句柄。 若要讓句柄繼承,您必須執行兩件事:

  • 指定當您建立、開啟或複製句柄時,要繼承句柄。 建立函式通常會使用 bInheritHandleSECURITY_ATTRIBUTES 結構的成員來進行此用途。 DuplicateHandle 會使用 bInheritHandles 參數。
  • 藉由呼叫 CreateProcess 函式時,將 bInheritHandles 參數設定為 TRUE,以指定要繼承的句柄。 此外,若要繼承標準輸入、標準輸出和標準錯誤句柄,dwFlagsSTARTUPINFO 結構的成員必須包含STARTF_USESTDHANDLES。

若要指定特定子進程應繼承的句柄清單,請使用 PROC_THREAD_ATTRIBUTE_HANDLE_LIST 旗標呼叫 UpdateProcThreadAttribute 函式。

繼承的句柄是指子進程中的相同物件,如同父進程一樣。 它也具有相同的值和訪問許可權。 因此,當一個進程變更物件的狀態時,變更會影響這兩個進程。 若要使用句柄,子進程必須擷取句柄值,並「知道」它所參考的物件。 通常,父進程會透過其命令行、環境區塊或某種形式的 進程間通訊,將這項資訊傳達給子進程。

使用 SetHandleInformation 函式來控制現有句柄是否可繼承。

繼承環境變數

子進程預設會繼承其父進程的環境變數。 不過,CreateProcess 可讓父進程指定不同的環境變數區塊。 如需詳細資訊,請參閱 環境變數

繼承目前目錄

GetCurrentDirectory 函式會擷取呼叫進程的目前目錄。 子進程預設會繼承其父進程的目前目錄。 不過,CreateProcess 可讓父進程為子進程指定不同的目前目錄。 若要變更呼叫程式的目前目錄,請使用 setCurrentDirectory函式