注释
此 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 |