首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinVerifyTrust返回0x80092003 - CRYPT_E_FILE_ERROR

WinVerifyTrust返回0x80092003 - CRYPT_E_FILE_ERROR
EN

Stack Overflow用户
提问于 2012-10-10 09:03:04
回答 1查看 4.8K关注 0票数 3

我正在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位,并试图检查程序文件下的dll,而不是Program x86。因此,我在Verify digital signature within system32/drivers folder上跟踪了答案,并试图禁用FS重定向,但这并没有帮助。

我确信这个问题与重定向有某种关系,因为我

  1. 在“程序文件(X86)”下创建x86文件夹的副本- WinVerifyTrust返回状态确定
  2. 将我的应用程序编译为64位- WinVerifyTrust返回状态OK

更新:

这是禁用重定向的代码:

代码语言:javascript
复制
 IntPtr ptr = new IntPtr();
  Wow64DisableWow64FsRedirection(ref ptr);
  var lStatus = WinVerifyTrust(
                    IntPtr.Zero,
                    pGuid,
                    pData);

 Wow64RevertWow64FsRedirection(ptr);

pinvoke声明:

代码语言:javascript
复制
 [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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-10 14:02:40

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12815676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档