Dll依赖和搜索顺序

时间:2014-08-09 17:40:11

标签: c++ windows winapi dll

我有一个依赖于B.DLL的A.DLL,适用于应用程序的DLL搜索顺序也适用于DLL,我的意思是当加载A.DLL时它是如何搜索B.DLL的?如果DLL搜索顺序不适用于DLL,我应该在哪里保留B.DLL?我应该将它保存在A.DLL所在的当前目录中,还是应该使用表单环境路径

注意:我不能把B.DLL放到System32

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

同时适用于exe和dll的搜索顺序:https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#standard-search-order-for-desktop-applications。无论安全模式如何,第一个始终是“应用程序加载目录”。在dll方面,根据我通过Process Monitor的发现,这取决于是通过LoadLibrary静态链接还是动态加载dll。对于静态链接,这是dll的目录,而对于动态加载,这是exe的目录。

例如,当C:\App.exe加载D:\A.dll时(如您的示例所示,取决于B.dll时,如果静态链接,Windows将在B.dll中搜索D:\,或者C:\(如果已加载LoadLibrary)。如果在此处找不到B.dll,则它将继续搜索其他目录,例如System32。

搜索顺序的下一行是“当前目录”。许多加载外部模块的应用程序可能有SetDllDirectory("")会在搜索中删除当前目录以便avoid dll preloading vulnerability

相关问题