2012-10-10 6 views
3

Я работаю над C# .net 3.5 и работает на 64-битной платформе.WinVerifyTrust возвращает 0x80092003 - CRYPT_E_FILE_ERROR

У меня есть 32-битная dll, которая мне нужна для динамической загрузки. dll находится в разделе «C: \ Program files \ ApplicationToLoad \ Application.dll»

потому что dll 32 бит. Мне нужно скомпилировать мое приложение и до 32 бит.

Перед загрузкой dll я проверяю, подписан ли dll с помощью WinVerifyTrust, но я получаю сообщение об ошибке 0x80092003 = CRYPT_E_FILE_ERROR = Произошла ошибка при чтении или записи в файл.

Я догадался, что это происходит, потому что я скомпилирован до 32 бит и пытается проверить DLL, находящуюся в папке Program Files, а не Program Files x86. Поэтому я последовал за ответом на Verify digital signature within system32/drivers folder и попытался отключить перенаправление FS, но это не помогло.

Я совершенно уверен, что проблема Сопутствующие как-то к перенаправлению, потому что я

  1. создали копию папки ApplicationToLoad под «Program Files (x86)» - WinVerifyTrust возвращается статус OK

  2. Составитель мое приложение 64 бит - WinVerifyTrust возвращается статус OK

UPDATE:

Это код, то отключает Перенаправление:

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); 
+0

Звук перенаправления файловой системы, скорее всего, будет нарушителем спокойствия. Почему эта DLL хранится в неправильной папке? Отправьте код, который отключает перенаправление. –

+0

Dll не моя :(Я не знаю, почему они сделали такую ​​глупую вещь ... – user844541

ответ

0

я понял это - проблема заключалась в том, что существует дополнительное пространство путь к файлу. и код получения пути к файлу в 32-битном и 64-битном вариантах был другим, поэтому он не воспроизводился при компиляции до 64 бит. , поэтому он не имеет ничего общего с перенаправлением ...