WinVerifyTrust возвращает 0x80092003 - CRYPT_E_FILE_ERROR

Я работаю на 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 Files, а не Program Files x86. Поэтому я последовал за ответом в разделе Проверка цифровой подписи в папке system32/drivers и попытался отключить перенаправление FS, но это не помогло.

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

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

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

ОБНОВИТЬ:

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

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

1 ответ

Решение

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

Другие вопросы по тегам