【问题标题】:Enforce Data Execution Prevention (DEP) in C# app在 C# 应用程序中实施数据执行保护 (DEP)
【发布时间】:2017-03-23 16:49:34
【问题描述】:

我有一个 C# 应用程序,它将以管理员权限运行。我想为此强制 DEP。为进程设置 DEP On 或在 DEP 被禁用时终止应用程序。

但我在这两个方面都失败了。 我的代码是:

private static void CheckDEP()
{
    var dep = SetProcessDEPPolicy(3);

    var handle = Process.GetCurrentProcess().Handle;
    var res = GetProcessDEPPolicy(handle, out var flags, out var permanent);
}

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetProcessDEPPolicy(uint dwFlags);

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
static extern bool GetProcessDEPPolicy(IntPtr hProcess, out uint lpFlags, out bool lpPermanent);

调用函数 SetProcessDEPPolicy(3) 总是失败并返回错误 50(文档说它应该仅在从 64 位进程调用时返回此错误,但事实并非如此)。

我可能在 GetProcessDEPPolicy 中有一些错误,因为调用失败并出现错误 87(参数不正确)。也许句柄错了?

【问题讨论】:

  • 几乎所有现代机器都使用选择 AlwaysOn 的 Boot.ini 运行。正如它所说,在代码中更改它是不支持
  • bcdedit 在我的情况下说它的 OptIn

标签: c# .net security dep


【解决方案1】:

因此,解决方案是更改配置管理器中的构建配置从 AnyCPU 到 x86。现在这两种方法都按预期工作了。

AnyCPU 的错误与 x64 的错误相同(默认情况下强制执行 DEP,这些方法应返回上述错误)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2010-11-15
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2011-07-06
    相关资源
    最近更新 更多