LoadLibraryのようなシステム DLLが必要になることがよくありますがKernel32.dll、簡単に指定できるパラメータがあります。LoadLibraryExdwFlagsLOAD_LIBRARY_SEARCH_SYSTEM32
セキュリティ上の理由から、これは非常に重要です。悪意のある攻撃者がデフォルトの検索パスをくつがえす可能性があるLoadLibraryからです。
しかし、私がまだサポートしなければならない Windows XP は、LOAD_LIBRARY_SEARCH_SYSTEM32何十年も前に存在しなかったため、使用できません。これにより、次の結論に至ります。完全修飾パスを考え出し、それを に渡す必要がありLoadLibraryます。
ただし、これを堅牢に実装するには、WoW64 とファイル システムのリダイレクトが原因で注意が必要です。問題のコードはライブラリにあり、奇妙な環境で呼び出される可能性があるため、この可能性について心配する必要があります。
私の現在の考えは、次の疑似コードのようなものです。
string Path;
BOOL Wow64Process;
if (IsWow64Process(CurrentProcess(), &Wow64Process) && Wow64Process &&
WoW64FSRedirectionIsDisabled)
Path = GetSystemWow64Directory();
else
Path = GetSystemDirectory();
Path += "\Kernel32.dll";
LoadLibrary(Path);
Wow64DisableWow64FsRedirectionandを使用することを検討し、拒否しWow64RevertWow64FsRedirectionましたが、ライブラリの で FS リダイレクトが無効のままになるため、これには問題がありますDLLMain。
上記を考えると、私がやろうとしていることについて最善の方法は何ですか?
ありがとう!