我正在使用C#.net 3.5並在64位平臺上運行。WinVerifyTrust返回0x80092003 - CRYPT_E_FILE_ERROR
我有一個32位的DLL,我需要動態加載。 該DLL位於「C:\ Program files \ ApplicationToLoad \ Application.dll」
因爲DLL是32位我必須將我的應用程序也編譯爲32位。
在加載DLL之前,我檢查是否使用WinVerifyTrust簽署了dll,但出現錯誤0x80092003 = CRYPT_E_FILE_ERROR =讀取或寫入文件時發生錯誤。
我猜想會發生這種情況,因爲我編譯爲32位,並試圖檢查在Program Files下而不是程序文件x86下的dll。所以我遵循Verify digital signature within system32/drivers folder的答案,並試圖禁用FS重定向,但它沒有幫助。
我敢肯定,這個問題以某種方式相關型號的重定向,因爲我
「程序文件(x86)」下創建ApplicationToLoad文件夾的副本 - 的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