我们有一个使用SetDllDirectory的应用程序

exe
 |
 |--DLLDirectory\Any1.dll
 |--DLLDirectory\Any2.dll


Any1.dll,在LoadLibrary之前调用SetDllDirectory(“ DLLDirectory”)
-----此时,我们应该调用SetDllDirectory(“”)
Any2.dll,在LoadLibrary之前调用SetDllDirectory(“ DLLDirectory”)
---->此时,我们应该调用SetDllDirectory(“”)

应用程序加载Any#.dll

SetDllDirectory("DllDirectory")
LoadLibrary(Any1.dll)
// SetDllDirectory("") ?
SetDllDirectory("DllDirectory")
LoadLibrary(Any2.dll)
// SetDllDirectory("") ?


我的疑问是,在LoadLibrary之后重置dll目录是否必要/强制?如果必须重设,如何重新设置例如:Any1.dll调用GetDllDirectory

SetDllDirectory function
Determine the loaded path for DLLs
我已经参考了上面的帖子,但是这里仍然需要一些建议。

最佳答案

简短的回答:不,不是强制性的。

长答案:用空字符串SetDllDirectory调用""仅从默认DLL搜索顺序中删除当前目录。如果要恢复默认搜索顺序,则需要传递NULL作为参数。您出于安全考虑而想要执行任何操作。基本上,执行运行时动态链接是有风险的,因为您不知道搜索顺序的当前状态。这就是为什么重置搜索顺序状态为好习惯的原因。在每个LoadLibrary调用之后重置搜索顺序状态的决定取决于您是否信任该库。

请阅读以下文章以了解更多详细信息:


Dynamic-Link Library Search Order
Dynamic-Link Library Security

关于c++ - SetDllDirectory,重置(强制性)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34215261/

10-08 22:04