LoadLibrary
のようなシステム DLLが必要になることがよくありますがKernel32.dll
、簡単に指定できるパラメータがあります。LoadLibraryEx
dwFlags
LOAD_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);
Wow64DisableWow64FsRedirection
andを使用することを検討し、拒否しWow64RevertWow64FsRedirection
ましたが、ライブラリの で FS リダイレクトが無効のままになるため、これには問題がありますDLLMain
。
上記を考えると、私がやろうとしていることについて最善の方法は何ですか?
ありがとう!