【问题标题】:WinVerifyTrust returns 0x80092003 - CRYPT_E_FILE_ERRORWinVerifyTrust 返回 0x80092003 - CRYPT_E_FILE_ERROR
【发布时间】:2012-10-10 09:03:04
【问题描述】:

我正在使用 C# .net 3.5 并在 64 位平台上运行。

我有一个需要动态加载的 32 位 dll。 该dll位于“C:\Program files\ApplicationToLoad\Application.dll”下

因为 dll 是 32 位的,所以我必须将我的应用程序也编译为 32 位。

在加载 dll 之前,我检查 dll 是否使用 WinVerifyTrust 签名,但我收到错误 0x80092003 = CRYPT_E_FILE_ERROR = 读取或写入文件时发生错误。

我猜这是因为我被编译为 32 位并试图检查 Program Files 下的 dll 而不是 Program Files x86。所以我按照Verify digital signature within system32/drivers folder 的答案尝试禁用FS 重定向,但没有帮助。

我很确定问题与重定向有关,因为我

  1. 在“program Files (x86)”下创建了 ApplicationToLoad 文件夹的副本 - WinVerifyTrust 返回了 OK 状态

  2. 将我的应用程序编译为 64 位 - WinVerifyTrust 返回状态正常

更新:

这是禁用重定向的代码:

 IntPtr ptr = new IntPtr();
  Wow64DisableWow64FsRedirection(ref ptr);
  var lStatus = WinVerifyTrust(
                    IntPtr.Zero,
                    pGuid,
                    pData);

 Wow64RevertWow64FsRedirection(ptr);

pinvoke 声明:

 [DllImport("kernel32.dll", SetLastError = true)]
            public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
            [DllImport("kernel32.dll", SetLastError = true)]
            public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

【问题讨论】:

  • 文件系统重定向听起来很可能是麻烦制造者。为什么这个 DLL 存储在错误的文件夹中?贴出禁用重定向的代码。
  • 这个 dll 不是我的 :( 我不知道他们为什么会做这么愚蠢的事情......

标签: c# x86-64 winverifytrust


【解决方案1】:

我想通了 - 问题是文件路径中有一个额外的空间。并且在 32 位和 64 位中获取文件路径的代码是不同的,这就是为什么它在编译为 64 位时没有重现的原因。 所以它与重定向无关......

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多