私はC#.net 3.5で作業しており、64ビットプラットフォームで実行しています。
動的にロードする必要がある32ビットのdllがあります。dllは、「C:\ Programfiles \ ApplicationToLoad\Application.dll」の下にあります。
dllは32ビットなので、アプリケーションも32ビットにコンパイルする必要があります。
dllをロードする前に、WinVerifyTrustを使用してdllが署名されているかどうかを確認しますが、エラーが発生します0x80092003 =CRYPT_E_FILE_ERROR=ファイルの読み取りまたは書き込み中にエラーが発生しました。
私は32ビットにコンパイルされており、Program Filesx86ではなくProgramFilesの下にあるdllをチェックしようとしているため、これが発生すると推測しました。そこで、system32 / driversフォルダー内のデジタル署名の確認の回答に従い、FSリダイレクトを無効にしようとしましたが、役に立ちませんでした。
私は問題が何らかの形でリダイレクトに関係していると確信しています。
「プログラムファイル(x86)」の下にApplicationToLoadフォルダーのコピーを作成しました-WinVerifyTrustはステータスOKを返しました
アプリケーションを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);