SetProcessMitigationPolicy 函数 (processthreadsapi.h)

为调用进程设置缓解策略。 缓解策略使流程能够强化自身抵御各种类型的攻击。

语法

BOOL SetProcessMitigationPolicy(
  [in] PROCESS_MITIGATION_POLICY MitigationPolicy,
  [in] PVOID                     lpBuffer,
  [in] SIZE_T                    dwLength
);

参数

[in] MitigationPolicy

要应用的缓解策略。 此参数的取值可为下列值之一:

含义
ProcessDEPPolicy 数据执行防护 (DEP) 进程的策略。
lpBuffer 参数指向指定 DEP 策略标志的 PROCESS_MITIGATION_DEP_POLICY 结构。
ProcessASLRPolicy 地址空间布局随机化 (ASLR) 策略。
lpBuffer 参数指向指定 ASLR 策略标志的 PROCESS_MITIGATION_ASLR_POLICY 结构。
ProcessDynamicCodePolicy 进程的动态代码策略。 启用后,进程无法生成动态代码或修改现有的可执行代码。
lpBuffer 参数指向指定动态代码策略标志的 PROCESS_MITIGATION_DYNAMIC_CODE_POLICY 结构。
ProcessStrictHandleCheckPolicy 如果进程操作无效的句柄,则进程将收到致命错误。
lpBuffer 参数指向一个PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY结构,该结构指定策略标志检查句柄。
ProcessSystemCallDisablePolicy 禁用在最低层使用 NTUser/GDI 函数的功能。
lpBuffer 参数指向PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY结构,该结构指定系统调用禁用策略标志。
ProcessMitigationOptionsMask 返回系统上所有缓解选项的有效位掩码。 应用程序可以设置许多缓解选项,而无需查询操作系统的缓解选项,方法是将按位与掩码组合在一起,一次排除所有不支持的位。
lpBuffer 参数指向掩码的ULONG64位向量,或者为了容纳超过 64 位,一个由ULONG64位向量的双元素数组。
ProcessExtensionPointDisablePolicy lpBuffer 参数指向PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY结构,该结构指定扩展点禁用策略标志。
ProcessControlFlowGuardPolicy 控制流防护 (CFG) 流程策略。
lpBuffer 参数指向指定 CFG 策略标志的 PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY 结构。
ProcessSignaturePolicy 可将图像加载限制为由 Microsoft、Windows 应用商店或 Microsoft、Windows 应用商店和 Windows 硬件质量实验室签名的映像的进程的策略 (WHQL) 。
he lpBuffer 参数指向指定签名策略标志 的 PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY 结构。
ProcessFontDisablePolicy 有关该过程的字体加载的策略。 启用后,该过程无法加载非系统字体。
lpBuffer 参数指向一个PROCESS_MITIGATION_FONT_DISABLE_POLICY结构,该结构指定用于字体加载的策略标志。
ProcessImageLoadPolicy 有关进程映像加载的策略,该策略确定允许映射到进程的可执行映像的类型。 打开后,无法从某些位置加载图像,例如远程设备或具有低强制标签的文件。
lpBuffer 参数指向PROCESS_MITIGATION_IMAGE_LOAD_POLICY结构,该结构指定用于图像加载的策略标志。
ProcessRedirectionTrustPolicy 进程的重定向卫士策略。 lpBuffer 参数指向指定缓解模式的PROCESS_MITIGATION_REDIRECTION_TRUST_POLICY结构。
ProcessSideChannelIsolationPolicy Windows 10 版本 1809及更高版本:有关指定进程的旁通道隔离的策略。
lpBuffer 参数指向PROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY结构,该结构指定侧信道隔离的策略标志。
ProcessUserShadowStackPolicy Windows 10版本 2004 及更高版本:有关进程的用户模式硬件强制 Stack 保护的策略。
lpBuffer 参数指向PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY结构,该结构指定用户模式硬件强制 Stack Protection 的策略标志。

[in] lpBuffer

如果 MitigationPolicy 参数为 ProcessDEPPolicy,则此参数指向指定 DEP 策略标志 的PROCESS_MITIGATION_DEP_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessASLRPolicy,则此参数指向指定 ASLR 策略标志 的PROCESS_MITIGATION_ASLR_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessImageLoadPolicy,则此参数指向接收图像加载策略标志 的PROCESS_MITIGATION_IMAGE_LOAD_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessStrictHandleCheckPolicy,则此参数指向指定策略标志句柄检查PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY结构。

如果 MitigationPolicy 参数为 ProcessSystemCallDisablePolicy,则此参数指向指定系统调用禁用策略标志 的PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessMitigationOptionsMask,则此参数指向掩码 的ULONG64 位向量,或为了容纳超过 64 位,一个由 ULONG64 位向量的双元素数组。

如果 MitigationPolicy 参数为 ProcessExtensionPointDisablePolicy,则此参数指向指定扩展点禁用策略标志 的PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY 结构。

如果 MitigationPolicy 参数是 ProcessControlFlowGuardPolicy,则此参数指向指定 CFG 策略标志 的PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessSignaturePolicy,则此参数指向指定签名策略标志 的 PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessFontDisablePolicy,则此参数指向指定字体加载策略标志 的PROCESS_MITIGATION_FONT_DISABLE_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessImageLoadPolicy,则此参数指向指定图像加载策略标志 的PROCESS_MITIGATION_IMAGE_LOAD_POLICY 结构。

如果 MitigationPolicy 参数为 ProcessRedirectionTrustPolicy,则此参数指向指定缓解模式 的PROCESS_MITIGATION_REDIRECTION_TRUST_POLICY结构

如果 MitigationPolicy 参数为 ProcessUserShadowStackPolicy,则此参数指向 一个PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY 结构,该结构指定用户模式硬件强制 Stack Protection 的策略标志。

[in] dwLength

lpBuffer 的大小(以字节为单位)。

返回值

如果该函数成功,则返回 TRUE。 如果函数失败,则返回 FALSE。 若要检索为此函数定义的错误值,请调用 GetLastError

注解

为进程设置缓解策略有助于防止攻击者利用安全漏洞。 使用 SetProcessMitigationPolicy 函数以编程方式启用或禁用安全缓解。

为了最大程度地提高有效性,应在进程初始化之前或期间应用缓解策略。 例如,仅当在加载进程中的所有图像之前应用该策略时,设置允许强制重定位图像的 ASLR 策略才有效。

ASLR 缓解策略在应用后不能降低其限制。

若要编译使用此函数的应用程序,请设置 _WIN32_WINNT >= 0x0602。 有关详细信息,请参阅 使用 Windows 标头

要求

要求
最低受支持的客户端 Windows 8 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 [仅限桌面应用]
目标平台 Windows
标头 processthreadsapi.h
Library Kernel32.lib
DLL Kernel32.dll