【问题标题】:Unable to load release DLL specified in AppInit_DLLs on Windows 7无法在 Windows 7 上加载 AppInit_DLLs 中指定的发布 DLL
【发布时间】:2013-04-10 10:32:02
【问题描述】:

我们通过 HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLS 路径挂钩一个库(比如 xyz.dll)。

我需要调试这个库,所以我创建了非调试 dll(&pdb) 并将其替换为 System32 目录中的原始 xyz.dll 库。现在当一个进程试图加载这个库时,我得到一个“坏图像”错误如下 -

“C:\Windows\system32\xyz.dll 不是为在 Windows 上运行而设计的,或者它包含错误。请尝试使用原始安装介质重新安装该程序,或联系您的系统管理员或软件供应商寻求支持。 "

我注意到原始 xyz.dll 是代码签名的,因此我还使用 signtool 使用临时证书对编译的非调试 xyz.dll 进行了签名,但它没有帮助。根据 [MSDN] (http://msdn.microsoft.com/en-us/windows/hardware/gg463040.aspx) 代码签名是推荐的,但不是强制性的。

后来我意识到,当我获得由有效证书签名的非调试库 xyz.dll 时,它可以工作。

我的问题:有什么方法可以让 Windows 7 绕过 dll 的签名验证?每次生成一个有效的证书并签署一个库对于开发/调试目的来说似乎非常麻烦。有什么简单的出路吗?

【问题讨论】:

    标签: windows visual-studio-2010 debugging winapi development-environment


    【解决方案1】:

    要禁用 AppInit_DLL 的代码签名强制执行,请使用以下键:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
    "RequireSignedAppInit_DLLs"=dword:00000000
    

    【讨论】:

      【解决方案2】:

      windows 验证数字签名的原因是 xyz.dll 是在 /integritycheck 链接器选项打开时编译的。当我在删除此标志后构建 dll 时,应用程序会加载它而不验证数字签名。

      参考http://msdn.microsoft.com/en-us/library/dn195769.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 2017-02-08
        • 2011-01-23
        • 1970-01-01
        相关资源
        最近更新 更多