Я работаю над 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, но это не помогло.
Я совершенно уверен, что проблема Сопутствующие как-то к перенаправлению, потому что я
создали копию папки ApplicationToLoad под «Program Files (x86)» - WinVerifyTrust возвращается статус OK
Составитель мое приложение 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);
Звук перенаправления файловой системы, скорее всего, будет нарушителем спокойствия. Почему эта DLL хранится в неправильной папке? Отправьте код, который отключает перенаправление. –
Dll не моя :(Я не знаю, почему они сделали такую глупую вещь ... – user844541