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 可以是图像文件计算机常量中列出的值。

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 线程才会运行。 有关详细信息,请参阅 用户模式计划

在 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 参数是指向 PROTECTION_LEVEL_SAME DWORD 值的指针。 这指定子进程的保护级别与其父进程的保护级别相同。

在 Windows 8.1 及更新版本以及 Windows Server 2012 R2 及更新中受支持。

PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY
lpValue 参数是指向指定子进程策略的 DWORD 值的指针。 策略指定是否允许创建子进程。

有关 lpValue 指向的 DWORD 的可能值的信息,请参阅备注。

在 Windows 10 及更新版本以及 Windows Server 2016 及更新版本中受支持。

PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY
此属性仅与已使用 桌面桥转换为 UWP 包的 win32 应用程序相关。

lpValue 参数是指向指定桌面应用策略的 DWORD 值的指针。 策略指定后代进程是否应在桌面环境中继续运行。

有关 lpValue 指向的 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时,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 仿真导致系统截获源自活动模板库 (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)
如果启用高熵自下而上随机化策略,则最多使用 1TB 的自下而上方差。 请注意,高熵自下而上随机化仅在同时启用自下而上 ASLR 时才有效;高熵自下而上随机化仅对本机 64 位进程有意义。

以下缓解选项适用于高熵自下而上随机化策略:

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 (0x00000001ui64 << 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 (0x00000001ui64 << 16) 进程可以使用此标志来防止同级硬件线程 (超线程) 干扰间接分支预测。 地址空间中包含敏感信息的进程应考虑启用此标志,以防止涉及间接分支预测 (的攻击,例如 CVE-2017-5715) 。
Windows 10 版本 1809: 以下值仅在 Windows 10 版本 1809 或更高版本中可用。
PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_ALWAYS_ON (0x0000001ui64 << 24) 此标志可由进程用来禁用 CPU 的推理存储绕过 (SSB) 功能,该功能可能容易受到涉及 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 (0x00000001ui64 << 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.h、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

DeleteProcThreadAttributeList

InitializeProcThreadAttributeList

进程和线程函数