经常一个人想LoadLibrary
系统DLL像Kernel32.dll
,得心应手LoadLibraryEx
有dwFlags
参数,允许您指定LOAD_LIBRARY_SEARCH_SYSTEM32
。模拟LoadLibraryEx的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
和Wow64RevertWow64FsRedirection
拒绝,但是这是有问题的,因为它会留在库中的DLLMain
禁用FS重定向。
鉴于上述情况,最好的方法是什么我想要做什么?
谢谢!
我确定'LOAD_LIBRARY_SEARCH_SYSTEM32'在XP64上不受支持。它仅支持从Windows Vista到使用[KB2533623](http://support.microsoft.com/kb/2533623)的Windows 8之前,而Windows 8据称支持它_de novo_。 – user2875552