經常一個人想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