往往想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
andWow64RevertWow64FsRedirection
但这有问题,因为它会在库的DLLMain
.
鉴于上述情况,我想做的最好的方法是什么?
谢谢!