【问题标题】:How might one cope with the ambiguous value produced by GetDllDirectory?如何应对 GetDllDirectory 产生的模棱两可的价值?
【发布时间】:2010-05-26 16:44:07
【问题描述】:

GetDllDirectory 产生一个模棱两可的值。当此调用产生的字符串为空时,表示以下情况之一:

  • 没有人打电话给SetDllDirectory
  • 有人将NULL 传递给SetDllDirectory
  • 有人将一个空字符串传递给SetDllDirectory

前两种情况对我来说是等价的,但第三种情况是个问题。如果我想编写保存/恢复代码(调用GetDllDirectory 来保存“旧”值,SetDllDirectory 临时设置一个“新”值,然后再次调用SetDllDirectory 来恢复“旧”值),我冒着扭转其他程序员意图的风险。

如果另一个程序员打算让当前工作目录处于 DLL 搜索顺序中(换句话说,前两个项目符号之一为真),并且我将一个空字符串传递给 SetDllDirectory,我将采用当前工作目录超出 DLL 搜索顺序,颠倒了其他程序员的意图。

谁能建议一种方法来消除或解决这种歧义?

附:我知道 DLL 搜索顺序中的当前工作目录可能被解释为安全漏洞。尽管如此,这是默认行为,我的代码无法撤消它;我的代码需要与所有潜在调用者的期望相兼容,其中许多是大型且陈旧且超出我控制范围的。

【问题讨论】:

    标签: winapi setdlldirectory


    【解决方案1】:

    没有解决这个问题。在岩石和坚硬的地方之间,您应该假设 NULL 已通过。已经有一种方法可以通过注册表设置启用安全搜索。

    【讨论】:

    • 这正如我所料。另一方面,很难知道要等多久才能有人发布一个好主意... :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2019-09-13
    • 2018-12-03
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多