UpdateProcThreadAttribute 函式 (processthreadsapi.h)

匯報進程和線程建立的屬性清單中指定的屬性。

語法

BOOL UpdateProcThreadAttribute(
  [in, out]       LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
  [in]            DWORD                        dwFlags,
  [in]            DWORD_PTR                    Attribute,
  [in]            PVOID                        lpValue,
  [in]            SIZE_T                       cbSize,
  [out, optional] PVOID                        lpPreviousValue,
  [in, optional]  PSIZE_T                      lpReturnSize
);

參數

[in, out] lpAttributeList

InitializeProcThreadAttributeList 函式所建立之屬性清單的指標。

[in] dwFlags

此參數是保留的,而且必須是零。

[in] Attribute

屬性清單中的要更新的屬性索引鍵。 此參數可以是下列其中一個值。

意義
PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY
lpValue 參數是GROUP_AFFINITY結構的指標,可指定新線程的處理器群組親和性。

Windows 7 和更新版本和 Windows Server 2008 R2 和更新版本支援。

PROC_THREAD_ATTRIBUTE_HANDLE_LIST
lpValue 參數是子進程要繼承之句柄清單的指標。

這些句柄必須建立為可繼承的句柄,而且不得包含虛擬句柄,例如 GetCurrentProcessGetCurrentThread 函式所傳回的句柄。

請注意,如果您使用這個屬性,請針對 CreateProcess 函式的 bInheritHandles 參數傳入 TRUE 值。
 
PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR
lpValue 參數是PROCESSOR_NUMBER結構的指標,可指定新線程的理想處理器。

Windows 7 和更新版本和 Windows Server 2008 R2 和更新版本支援。

PROC_THREAD_ATTRIBUTE_MACHINE_TYPE
lpValue 參數是 WORD 的指標,可指定子進程的機器架構。

Windows 11和更新版本中支援。

lpValue 所指向的 WORD 可以是 IMAGE FILE MACHINE CONSTANTS 上所列的值。

PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY
lpValue 參數是 DWORDDWORD64的指標,指定子進程的惡意探索風險降低原則。 從 Windows 10 1703 版開始,此參數也可以是兩個專案DWORD64陣列的指標。

指定的原則會覆寫為應用程式和系統設定的原則,而且無法在子進程開始執行之後變更。

lpValue 所指向的 DWORDDWORD64可以是備註中列出的一或多個值。

Windows 7 和更新版本和 Windows Server 2008 R2 和更新版本支援。

PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
lpValue 參數是進程句柄的指標,可用來取代呼叫進程做為所建立進程的父系。 要使用的程式必須具有 PROCESS_CREATE_PROCESS 訪問許可權。

繼承自指定進程的屬性包括句柄、裝置對應、處理器親和性、優先順序、配額、進程令牌和作業物件。 (請注意,某些屬性,例如偵錯埠會來自建立進程,而不是這個 handle.) 所指定的進程

PROC_THREAD_ATTRIBUTE_PREFERRED_NODE
lpValue 參數是新進程慣用 NUMA 節點之節點編號的指標。

Windows 7 和更新版本和 Windows Server 2008 R2 和更新版本支援。

PROC_THREAD_ATTRIBUTE_UMS_THREAD
lpValue 參數是UMS_CREATE_THREAD_ATTRIBUTES結構的指標,指定 (UMS) 線程內容的使用者模式排程,以及與線程建立關聯的 UMS 完成清單。

建立UMS線程之後,系統會將它排入指定的完成清單。 只有在應用程式的 UMS 排程器從完成清單中擷取 UMS 線程並選取要執行的 UMS 線程時,UMS 線程才會執行。 如需詳細資訊,請參閱 使用者模式排程

Windows 7 和更新版本和 Windows Server 2008 R2 和更新版本支援。

Windows 11 和更新版本 (不支援,請參閱使用者模式排程) 。

PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES
lpValue 參數是定義應用程式容器安全性功能的SECURITY_CAPABILITIES結構的指標。 如果設定此屬性,則會建立新的進程作為AppContainer進程。

Windows 8 和更新版本和更新版本支援 Windows Server 2012和更新版本。

PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL
lpValue 參數是 DWORD 值的指標,PROTECTION_LEVEL_SAME。 這會指定子進程的保護層級,使其與父進程的保護層級相同。

Windows 8.1 和更新版本和 Windows Server 2012 R2 和更新版本支援。

PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY
lpValue 參數是指定子進程原則之 DWORD 值的指標。 原則會指定是否允許建立子進程。

For information on the possible values for the DWORD to which lpValue points, see Remarks.

Windows 10 和更新版本和更新版本支援 Windows Server 2016和更新版本。

PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY
此屬性僅與已使用 傳統型橋接器 轉換成 UWP 套件的 win32 應用程式相關。

lpValue 參數是指定傳統型應用程式原則之 DWORD 值的指標。 此原則會指定子系進程是否應該繼續在桌面環境中執行。

如需 DWORD 指向之DWORD 可能值的相關信息,請參閱。

Windows 10 版本 1703 和更新版本和 Windows Server 版本 1709 和更新版本支援。

PROC_THREAD_ATTRIBUTE_JOB_LIST
lpValue 參數是要依指定順序指派給子進程之工作句柄清單的指標。

Windows 10 和更新版本和更新版本支援 Windows Server 2016和更新版本。

PROC_THREAD_ATTRIBUTE_ENABLE_OPTIONAL_XSTATE_FEATURES
lpValue 參數是DWORD64值的指標,指定要為新線程啟用的一組選擇性 XState 功能。

Windows 11 和更新版本和 Windows Server 2022 和更新版本支援。

[in] lpValue

屬性值的指標。 這個值必須持續存在,直到使用 DeleteProcThreadAttributeList 函式終結屬性清單為止。

[in] cbSize

lpValue 參數所指定的屬性值大小。

[out, optional] lpPreviousValue

此參數是保留的,而且必須是 NULL。

[in, optional] lpReturnSize

此參數是保留的,而且必須是 NULL。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

屬性清單是一個不透明結構,由一系列索引鍵/值組組成,每個屬性各一個。 程式只能更新本主題所述的屬性索引鍵。

當您為 Attribute 參數指定PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY時,DWORD 或 DWORD64 lpValue 所指向的 DWORDDWORD64可以是下列一或多個值:

PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE (0x00000001) 啟用子進程的數據執行防止 (DEP) 。 如需詳細資訊,請參閱 數據執行防止
PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE (0x00000002) 啟用子進程的 DEP-ATL Thunk 模擬。 DEP-ATL Thunk 模擬會導致系統攔截源自 Active Template Library (ATL) Thunk 層的 NX 錯誤。 這個值只能使用 PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE來指定。
PROCESS_CREATION_MITIGATION_POLICY_SEHOP_ENABLE (0x00000004) 啟用子進程的結構化例外狀況處理程式覆寫保護 (SEHOP) 。 SEHOP 會封鎖使用結構化例外狀況處理程式的惡意探索, (SEH) 覆寫技術。
Windows 7、Windows Server 2008 R2、Windows Server 2008 和 Windows Vista: 除非 Windows 8 和 Windows Server 2012,否則不支援下列值。
強制位址空間配置隨機化 (ASLR) 原則啟用時,強制重新建立與動態基底相容的影像,就像在載入時發生影像基底衝突一樣。 如果需要重新配置,將不會載入沒有基底重新配置區段的影像。

下列風險降低選項適用於強制 ASLR 原則:

PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON (0x00000001 << 8)
PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_OFF (0x00000002 << 8)
PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON_REQ_RELOCS (0x00000003 << 8)
如果啟用,堆積會在損毀原則上終止,會導致堆積在損毀時終止。 請注意,『always off』 不會覆寫映像標頭中設定目前子系統版本的二進位檔的預設選擇加入。 在損毀時終止堆積是強制使用者模式。

下列風險降低選項可用於堆積終止損毀原則:

PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_ON (0x00000001 << 12)
PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_OFF (0x00000002 << 12)
下層隨機化原則包含堆疊隨機化選項,會導致隨機位置做為最低用戶位址使用。

下列風險降低選項適用於下層隨機化原則:

PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_ON (0x00000001 << 16)
PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_OFF (0x00000002 << 16)
如果啟用,則高 entropy 下層隨機化原則最多會使用 1TB 的下層變異數。 請注意,如果同時啟用下拉式 ASLR,高 entropy 下拉式隨機化才有效;高 entropy 由下而下隨機化對原生 64 位進程而言才有意義。

下列風險降低選項適用於高 Entropy 向上隨機化原則:

PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_ON (0x00000001 << 20)
PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_OFF (0x00000002 << 20)
如果啟用,則嚴格句柄檢查強制執行原則會導致例外狀況立即在不正確的句柄參考上引發。 如果未啟用此原則,則會改為從句柄參考傳回失敗狀態。

下列風險降低選項適用於嚴格句柄檢查強制執行原則:

PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_ON (0x00000001 << 24)
PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_OFF (0x00000002 << 24)
如果啟用,Win32k 系統呼叫會停用原則,可防止進程進行 Win32k 呼叫。

下列風險降低選項適用於 Win32k 系統呼叫停用原則:

PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_ON (0x00000001 << 28)
PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_OFF (0x00000002 << 28)
如果啟用,擴充點停用原則可防止使用特定內建的第三方擴充點。 此原則會封鎖下列擴充點:
  • AppInit DLL
  • Winsock 分層服務提供者 (LSP)
  • 全域 Windows 勾點
  • 舊版輸入法編輯器 (IME)
本機勾點仍可搭配啟用擴充點停用原則使用。 此行為可用來防止舊版擴充點載入未使用這些擴充點的程式。

擴充點停用原則可使用下列風險降低選項:

PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON (0x00000001 << 32)
PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_OFF (0x00000002 << 32)
如果開啟控制流程防護 (CFG) 原則,則會在已啟用 CFG 的程式代碼中,對間接呼叫進行額外的限制。

下列風險降低選項可用於控制 CFG 原則:

  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_MASK (0x00000003ui64 << 40)
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_DEFER (0x00000000ui64 << 40)
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_ON (0x00000001ui64 << 40)
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_OFF (0x00000002ui64 << 40)
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_EXPORT_SUPPRESSION (0x00000003ui64 << 40)
此外,您可以指定下列原則來強制執行 EXE/DLL 必須啟用 CFG。 如果嘗試載入未啟用 CFG 的 EXE/DLL,載入將會失敗:
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_MASK (0x00000003ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_DEFER (0x00000000ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_ALWAYS_ON (0x000000001ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_ALWAYS_OFF (0x00000002ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_RESERVED (0x00000003ui64 << 8)
如果開啟動態程式代碼原則,可防止進程產生動態程序代碼或修改可執行程序代碼。

動態程式代碼原則提供下列風險降低選項:

PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_MASK (0x00000003ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_DEFER (0x00000000ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_ON (0x00000001ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_OFF (0x00000002ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_ON_ALLOW_OPT_OUT (0x00000003ui64 << 36)
二進位簽章原則需要正確簽署 EXE/DLL。

下列風險降低選項適用於二進位簽章原則:

  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_MASK (0x00000003ui64 << 44)
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_DEFER (0x00000000ui64 << 44)
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON (0x00000001ui64 << 44)
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_OFF (0x00000002ui64 << 44)
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALLOW_STORE (0x00000003ui64 << 44)
進程的字型載入防護原則會決定是否可以為進程載入非系統字型。 開啟原則時,會防止進程載入非系統字型。

下列風險降低選項適用於字型載入防護原則:

PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_MASK (0x00000003ui64 << 48)
PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_DEFER (0x00000000ui64 << 48)
PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_ALWAYS_ON (0x00000001ui64 << 48)
PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_ALWAYS_OFF (0x00000002ui64 << 48)
PROCESS_CREATION_MITIGATION_POLICY_AUDIT_NONSYSTEM_FONTS (0x00000003ui64 << 48)
進程的映像載入原則會決定可對應至進程的可執行映像類型。 開啟原則時,無法從某些位置載入影像,例如移除具有低強制卷標的裝置或檔案。

映射載入原則可使用下列風險降低選項:

PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_MASK (0x00000003ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_DEFER (0x00000000ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_ALWAYS_ON (0x00000001ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_ALWAYS_OFF (0x00000002ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_RESERVED (0x00000003ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_MASK (0x00000003ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_DEFER (0x00000000ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_ON (0x00000001ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_OFF (0x00000002ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_RESERVED (0x00000003ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_MASK (0x00000003ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_DEFER (0x00000000ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON (0x00000001ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_OFF (0x00000002ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_RESERVED (0x00000003ui64 << 60)
Windows 10 版本 1709:下列值僅適用於 Windows 10 1709 版或更新版本,且僅適用於 2018 年 1 月 Windows 安全性更新,以及 OEM 裝置製造商的任何適用韌體更新。 請參閱 適用於 IT 專業人員的 Windows 用戶端指引,以防止推測性執行端通道弱點
PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_INDIRECT_BRANCH_PREDICTION_ALWAYS_ON (0x000000001ui64 << 16) 此旗標可供進程用來防止同層級硬體線程 (超線程) 干擾間接分支預測。 在其地址空間中具有敏感性資訊的處理程式應考慮啟用此旗標,以防止涉及間接分支預測 (的攻擊,例如 CVE-2017-5715) 。
Windows 10 版本 1809:下列值僅適用於 Windows 10 版本 1809 或更新版本。
PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_ALWAYS_ON ( 0x0000000001ui64 << 24) 此旗標可供進程用來停用 CPU (SSB) 功能,這些 CPU 可能會容易受到涉及 SSB (CVE-2018-3639) 的推測性執行端通道攻擊。 只有具有必要硬體功能的特定 Intel CPU 才支援此旗標。 在不支援此功能的CPU上,旗標沒有任何作用。

Windows 10 版本 2004:下列值僅適用於 Windows 10 2004 版或更新版本。

硬體強制執行的 Stack Protection (HSP) 是硬體式安全性功能,其中 CPU 會藉由採用陰影堆疊機制,在運行時間驗證函式傳回位址。 對於使用者模式 HSP,預設模式是相容性模式,其中只有視為與陰影堆疊相容的模組發生陰影堆疊違規, (CETCOMPAT) 是嚴重。 在嚴格模式中,所有陰影堆疊違規都是嚴重。

下列風險降低選項適用於使用者模式硬體強制執行的 Stack Protection 和相關功能:

PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_ON (0x00000001ui64 << 28)
PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_OFF (0x00000002ui64 << 28)
PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_STRICT_MODE (0x00000003ui64 << 28)

指令指標驗證:

PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_ON (0x00000001ui64 << 32)
PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_OFF (0x00000002ui64 << 32)
PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x00000003ui64 << 32)

封鎖非 CETCOMPAT/非 EHCONT 二進位檔的載入:

PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_ON (0x00000001ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_OFF (0x00000002ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_NON_EHCONT (0x00000003ui64 << 36)

限制用來指定動態程式碼安全性屬性的特定 HSP API,使其只能從進程外部呼叫:

PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_ON (0x000000001ui64 << 48)
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_OFF (0x00000002ui64 << 48)

如果啟用,FSCTL 系統呼叫會停用原則,可防止進程進行 NtFsControlFile 呼叫。 FSCTL 系統呼叫停用原則可使用下列風險降低選項:

PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_ALWAYS_ON (0x00000001ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_ALWAYS_OFF (0x00000002ui64 << 56)

當您為 Attribute 參數指定PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY,lpValue 所指向的 DWORD 可以是下列一或多個值:

PROCESS_CREATION_CHILD_PROCESS_RESTRICTED 0x01

建立的進程不允許建立子進程。 此限制會變成執行進程時令牌的屬性。 請注意,這項限制只有在沙盒化應用程式中才有效 (,例如 AppContainer) ,以確保進程無法存取特殊許可權進程句柄。 例如,如果限制子進程建立的進程能夠存取另一個具有PROCESS_CREATE_PROCESS或PROCESS_VM_WRITE訪問許可權的進程句柄,則可能略過子進程限制。

PROCESS_CREATION_CHILD_PROCESS_OVERRIDE 0x02

如果其他限制,則允許建立的進程建立子進程。 如果建立新進程的進程不受限制,您只能指定此值。

當您為 Attribute 參數指定PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY時,lpValue 所指向的 DWORD 可以是下列一或多個值:

PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_ENABLE_PROCESS_TREE 0x01

正在建立的進程將會在傳統型應用程式運行時間環境之外建立任何子進程。 此行為是未設定任何原則之進程的預設值。

PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_DISABLE_PROCESS_TREE 0x02

正在建立的進程將會在傳統型應用程式運行時間環境中建立任何子進程。 此原則會由子代進程繼承,直到透過建立具有 PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_ENABLE_PROCESS_TREE的進程加以覆寫為止。

PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_OVERRIDE 0x04

正在建立的進程將會在傳統型應用程式運行時間環境中執行。 此原則僅適用於所建立的進程,不適用於其子代。

若要以與父系相同的保護層級啟動子進程,父進程必須指定子進程的 PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL 屬性。 這可用於受保護和未受保護的進程。 例如,當未受保護的進程使用此旗標時,系統會在未受保護的層級啟動子進程。 這兩種情況下都必須指定 CREATE_PROTECTED_PROCESS 旗標。

下列範例會啟動與父進程相同的保護層級的子進程:

DWORD ProtectionLevel = PROTECTION_LEVEL_SAME;
SIZE_T AttributeListSize;

STARTUPINFOEXW StartupInfoEx = { 0 };

StartupInfoEx.StartupInfo.cb = sizeof(StartupInfoEx);

InitializeProcThreadAttributeList(NULL, 1, 0, &AttributeListSize)


StartupInfoEx.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST) HeapAlloc(
    GetProcessHeap(),
    0,
    AttributeListSize
    );

if (InitializeProcThreadAttributeList(StartupInfoEx.lpAttributeList,
                                      1,
                                      0,
                                      &AttributeListSize) == FALSE)
{
    Result = GetLastError();
    goto exitFunc;
}

if (UpdateProcThreadAttribute(StartupInfoEx.lpAttributeList,
                              0,
                              PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
                              &ProtectionLevel,
                              sizeof(ProtectionLevel),
                              NULL,
                              NULL) == FALSE)
{
    Result = GetLastError();
    goto exitFunc;
}

PROCESS_INFORMATION ProcessInformation = { 0 };

if (CreateProcessW(ApplicationName,
                   CommandLine,
                   ProcessAttributes,
                   ThreadAttributes,
                   InheritHandles,
                   EXTENDED_STARTUPINFO_PRESENT | CREATE_PROTECTED_PROCESS,
                   Environment,
                   CurrentDirectory,
                   (LPSTARTUPINFOW)&StartupInfoEx,
                   &ProcessInformation) == FALSE)
{
    Result = GetLastError();
    goto exitFunc;
}

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 processthreadsapi.h (包含 Windows 7、Windows Server 2008 Windows Server 2008 R2)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

DeleteProcThreadAttributeList

InitializeProcThreadAttributeList

處理序和執行緒函式