winnt.h) (PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY 结构

包含用户模式硬件强制 Stack Protection (HSP) 的进程缓解策略设置。 GetProcessMitigationPolicySetProcessMitigationPolicy 函数使用此结构。

语法

typedef struct _PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY {
  union {
    DWORD Flags;
    struct {
      DWORD EnableUserShadowStack : 1;
      DWORD AuditUserShadowStack : 1;
      DWORD SetContextIpValidation : 1;
      DWORD AuditSetContextIpValidation : 1;
      DWORD EnableUserShadowStackStrictMode : 1;
      DWORD BlockNonCetBinaries : 1;
      DWORD BlockNonCetBinariesNonEhcont : 1;
      DWORD AuditBlockNonCetBinaries : 1;
      DWORD CetDynamicApisOutOfProcOnly : 1;
      DWORD SetContextIpValidationRelaxedMode : 1;
      DWORD ReservedFlags : 22;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
} PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY, *PPROCESS_MITIGATION_USER_SHADOW_STACK_POLICY;

成员

DUMMYUNIONNAME

DUMMYUNIONNAME.Flags

此成员保留供系统使用。

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStack

如果为 TRUE,则会在兼容模式下为进程启用用户模式硬件强制 Stack Protection。 这意味着,如果硬件支持,CPU 会在运行时使用影子堆栈机制来验证函数返回地址。 在兼容模式下,只有在被认为与卷影堆栈兼容 (CETCOMPAT) 的模块中发生的影子堆栈冲突是致命的。 对于要被视为 CETCOMPAT 的模块,需要使用 CETCOMPAT 进行二进制文件编译,或使用 SetProcessDynamicEnforcedCetCompatibleRanges 进行标记以用于动态代码。 无法通过 SetProcessMitigationPolicy 更改此字段。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditUserShadowStack

如果为 TRUE,则会将本来是致命的影子堆栈冲突视为非致命冲突,并且诊断事件将记录在事件日志中。 如果此字段为 TRUE,EnableUserShadowStack 必须为 TRUE,EnableUserShadowStackStrictMode 可能为 TRUE,具体取决于是审核兼容性模式还是正在审核严格模式。 无法通过 SetProcessMitigationPolicy 更改此字段。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidation

如果为 TRUE,则调用修改线程的执行上下文的 API(如 SetThreadContextRtlRestoreContext)时,对新执行上下文中指定的指令指针执行验证。 无法通过 SetProcessMitigationPolicy 更改此字段。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditSetContextIpValidation

如果为 TRUE,则允许导致验证失败的指令指针,并在事件日志中记录诊断事件。 如果此字段为 TRUE,则 SetContextIpValidation 必须为 TRUE,SetContextIpValidationRelaxedMode 可能为 TRUE,具体取决于指令指针验证当前运行的模式。 无法通过 SetProcessMitigationPolicy 更改此字段。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStackStrictMode

如果为 TRUE,则会在严格模式下为进程启用用户模式硬件强制 Stack Protection。 所有阴影堆栈冲突都是致命的。 如果此字段为 TRUE,EnableUserShadowStack 必须为 TRUE。 如果在兼容模式下启用了 HSP,则可以通过将此字段设置为 TRUE 并调用 SetProcessMitigationPolicy 在运行时将其升级到严格模式。 无法通过 SetProcessMitigationPolicy 降级或禁用 HSP。 如果 HSP 处于禁用状态,则无法通过 SetProcessMitigationPolicy 启用 HSP

DUMMYUNIONNAME.DUMMYSTRUCTNAME.BlockNonCetBinaries

如果为 TRUE,则会阻止未使用 CETCOMPAT 编译的二进制文件加载到进程中。 可以通过调用 SetProcessMitigationPolicy 在进程启动后启用此策略。 启用后,无法禁用它。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.BlockNonCetBinariesNonEhcont

如果为 TRUE,则阻止将未使用 CETCOMPAT 编译或不包含异常处理延续元数据 (/guard:ehcont) 的二进制文件加载到进程中。 如果此字段为 TRUE,则 BlockNonCetBinaries 必须为 TRUE。 可以通过调用 SetProcessMitigationPolicy 在进程启动后启用此策略。 启用后,无法禁用或降级。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditBlockNonCetBinaries

如果为 TRUE,则允许本来被阻止的二进制加载,并在事件日志中记录诊断事件。 如果此字段为 TRUE,BlockNonCetBinaries 必须为 TRUE,BlockNonCetBinariesNonEhcont 可能为 TRUE,具体取决于当前阻止将哪些类型的二进制文件加载到进程中。 无法通过 SetProcessMitigationPolicy 更改此字段。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.CetDynamicApisOutOfProcOnly

如果为 TRUE,则只能出于安全目的从进程外部调用用于指定动态代码安全属性的某些 HSP API。 这些 API 是 SetProcessDynamicEHContinuationTargetsSetProcessDynamicEnforcedCetCompatibleRanges。 可以通过调用 SetProcessMitigationPolicy 在进程启动后启用此策略。 启用后,无法禁用它。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidationRelaxedMode

如果为 TRUE,则进程的指令指针验证降级为宽松模式,这允许动态代码或不包含 异常处理延续元数据的二进制文件中的所有指令指针。 如果此字段为 TRUE,则 SetContextIpValidation 必须为 TRUE。 通过将此字段设置为 FALSE 并调用 SetProcessMitigationPolicy,可以在运行时将进程从宽松模式升级到普通模式。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.ReservedFlags

此成员保留供系统使用。

要求

要求
最低受支持的客户端 Windows 10版本 2004 (10.0;内部版本 19041)
最低受支持的服务器 Windows Server 版本 2004 (10.0;内部版本 19041)
标头 winnt.h

另请参阅

CETCOMPAT

GetProcessMitigationPolicy

SetProcessMitigationPolicy