我正在尝试SetProcessMitigationPolicy
在 Windows 10 上使用来启用ProcessStrictHandleCheckPolicy:
如果处理无效的句柄,该进程将收到致命错误。
作为一般规则,严格的句柄检查一旦打开就不能关闭。因此,使用此策略调用SetProcessMitigationPolicy函数时,RaiseExceptionOnInvalidHandleReference和HandleExceptionsPermanentlyEnabled子结构成员的值必须相同。不能仅临时启用无效句柄异常。
我可以启用许多其他缓解措施:
ProcessDynamicCodePolicy
:进程的动态代码策略。开启后,进程无法生成动态代码或修改现有的可执行代码。ProcessExtensionPointDisablePolicy
:包含旧版扩展点 DLL 的进程缓解策略设置。ProcessSignaturePolicy
:可以将图像加载限制为由 Microsoft、Windows 应用商店或 Microsoft、Windows 应用商店和 Windows 硬件质量实验室 (WHQL) 签名的图像的进程策略。ProcessFontDisablePolicy
:关于进程字体加载的策略。开启后,进程无法加载非系统字体。ProcessImageLoadPolicy
:关于进程图像加载的策略,它决定了允许映射到进程中的可执行图像的类型。打开后,无法从某些位置加载图像,例如远程设备或具有低强制标签的文件。
但是ProcessStrictHandleCheckPolicy:
PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY policy;
policy.RaiseExceptionOnInvalidHandleReference = 1;
policy.HandleExceptionsPermanentlyEnabled = 1;
BOOL res = SetProcessMitigationPolicy(ProcessStrictHandleCheckPolicy, policy, sizeof(policy));
if (!res)
RaiseLastWin32Error();
失败,错误代码 87:
ERROR_INVALID_PARAMETER
参数不正确
怎么了?
奖金喋喋不休
ProcessDynamicCodePolicy策略阻止嵌入式 Web 浏览器运行 Javascript :
ProhibitDynamicCode
:设置(0x1)以防止进程生成动态代码或修改现有的可执行代码;否则保持未设置 (0x0)。AllowThreadOptOut
: 设置 (0x1) 以允许线程通过调用SetThreadInformation函数来选择退出动态代码生成的限制,并将 ThreadInformation 参数设置为ThreadDynamicCodePolicy;否则保持未设置 (0x0)。您不应同时使用AllowThreadOptOut和ThreadDynamicCodePolicy设置来提供强大的安全性。这些设置仅旨在使应用程序能够更轻松地调整其代码以适应完整的动态代码限制。
更多红利
我其实是在Delphi,所以语法和上面的C/C++/C#伪代码不同:
type
//ProcessStrictHandleCheckPolicy - The process will receive a fatal error if it manipulates an invalid handle. Useful for preventing downstream problems in a process due to handle misuse.
PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY = record
Flags: DWORD;
//DWORD RaiseExceptionOnInvalidHandleReference : 1;
//DWORD HandleExceptionsPermanentlyEnabled : 1;
//DWORD ReservedFlags : 30;
end;
procedure SetMitigationPolicy;
var
policy: PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
res: BOOL;
begin
policy.Flags := $00000002;
res := SetProcessMitigationPolicy(ProcessStrictHandleCheckPolicy, @policy, sizeof(policy));
if not res then
RaiseLastWin32Error;
end;
它不会改变问题:
- 有时当我发布 Delphi 代码时,它并不是严格与 Delphi 相关的,我收到评论说我应该包含 Delphi 标记
- 有时当我发布 Delphi 代码时,它并不是严格与 Delphi 相关的,我会收到一些我不应该包含 Delphi 标签的评论
掷骰子
不要包含delphi delphi-xe6标签。