SetProcessDynamicEnforcedCetCompatibleRanges 函数 (processthreadsapi.h)

注释

此 API 已在 2020 年 11 月发布的更新中添加到 19041 SDK。

设置指定进程的动态强制 CETCOMPAT 范围。

Syntax

BOOL SetProcessDynamicEnforcedCetCompatibleRanges(
  HANDLE                                  Process,
  USHORT                                  NumberOfRanges,
  PPROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE Ranges
);

参数

Process

进程的句柄。 此句柄必须具有 PROCESS_SET_INFORMATION 访问权限。 有关详细信息,请参阅 进程安全性和访问权限

NumberOfRanges

提供要设置的动态强制 CETCOMPAT 范围的数量。

Ranges

指向动态强制 CETCOMPAT 范围的数组的指针。 有关此结构的详细信息,请参阅 PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE

返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError。 请注意,即使函数失败,提供的 CETCOMPAT 范围的一部分也可能已成功处理。 调用方需要检查通过 Ranges 指定的每个 CETCOMPAT 范围中的标志,以确定它是否已成功处理。

注解

用户模式硬件强制执行的堆栈保护(HSP)是一项安全功能,如果硬件支持,则 CPU 会通过采用影子堆栈机制在运行时验证函数返回地址。 在 HSP 兼容模式下,只有被视为与影子堆栈(CETCOMPAT)兼容的模块中发生的影子堆栈冲突是致命的。 要使模块被视为 CETCOMPAT,需要使用二进制文件的 CETCOMPAT 进行编译,或者使用 SetProcessDynamicEnforcedCetCompatibleRanges 为动态代码进行标记。 在 HSP 严格模式下,所有阴影堆栈冲突都是致命的。

要求

Requirement 价值
最低支持的客户端 Windows 10 版本 2004 (10.0;内部版本 19041.662)
支持的最低服务器 Windows Server 版本 2004 (10.0;内部版本 19041.662)
Header processthreadsapi.h