我们有一个使用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/