我有下面一行的驱动程序代码
hKernel32DLL = LoadLibrary( "Kernel32.dll" );
现在有人查看了我的代码,并建议使用完整路径加载DLL。 我在网上做了一个关于加载kernel32.dll的快速搜索,但是没有人真正使用完整路径。
有人可以向我解释为什么我应该指定kernel32.dll的绝对路径吗?
答案 0 :(得分:0)
使用完整路径加载.DLL更安全。 Kernel32已被加载,因为您已静态链接到LoadLibrary
,因此在您的特定情况下这无关紧要。 (在Windows 2000以外的所有版本的Windows上,CreateProcess
甚至会在启动之前将Kernel32加载到进程中,但这不适用于其他核心.DLL,例如Gdi32和User32。)
如果您担心.DLL劫持攻击,则可以使用LOAD_LIBRARY_SEARCH_SYSTEM32
标志调用SetDefaultDllDirectories
,这会强制所有具有相对路径的.DLL从系统目录中加载。