1

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

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

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

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

任何人都可以提出一种方法来消除或解决这种歧义吗?

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

4

1 回答 1

0

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

于 2010-05-26T17:58:52.783 回答