来自另一个DLL的LoadLibrary

在MSDN中描述的DLL查找path是:

  1. 当前进程的可执行模块所在的目录。
  2. 当前目录。
  3. Windows系统目录。 GetSystemDirectory函数检索此目录的path。
  4. Windows目录。 GetWindowsDirectory函数检索此目录的path。
  5. PATH环境variables中列出的目录。

这带来了以下疑问:

假设我在某个目录下有一个可执行文件,例如: c:\execdir\myexe.exe ,它会加载一个在PATHfind的DLL,位于c:\dlldir\mydll.dll 。 现在,假设mydll.dll尝试使用LoadLibrary加载另一个DLL。 首先查看哪个目录 – c:\dlldirc:\execdir

我认为上面引用的查询规则说它将会是c:\execdir因为这被称为“当前进程的可执行模块所在的目录”,但是从另一个来源获得确认将是很好的。

编辑:另外,是c:\dlldir\ 在所有看 ? 毕竟,它既不是.exe所在的位置,也不是“当前目录”(如果这是一般意义上的)。

PS我对Windows XP和7都感兴趣。

是的,它首先是可执行文件目录,并且在某些情况下意识到这可能导致安全漏洞 。 该页面上有建议,以确保您的应用程序不会通过此机制受到威胁。