gpt4 book ai didi

c++ - SetDllDirectory,重置(强制)?

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:16 29 4
gpt4 key购买 nike

我们有一个使用 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 调用后重置搜索顺序状态的决定取决于您是否信任该库。

详情请阅读以下文章:

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com