【发布时间】:2010-05-26 16:44:07
【问题描述】:
GetDllDirectory 产生一个模棱两可的值。当此调用产生的字符串为空时,表示以下情况之一:
- 没有人打电话给
SetDllDirectory - 有人将
NULL传递给SetDllDirectory - 有人将一个空字符串传递给
SetDllDirectory
前两种情况对我来说是等价的,但第三种情况是个问题。如果我想编写保存/恢复代码(调用GetDllDirectory 来保存“旧”值,SetDllDirectory 临时设置一个“新”值,然后再次调用SetDllDirectory 来恢复“旧”值),我冒着扭转其他程序员意图的风险。
如果另一个程序员打算让当前工作目录处于 DLL 搜索顺序中(换句话说,前两个项目符号之一为真),并且我将一个空字符串传递给 SetDllDirectory,我将采用当前工作目录超出 DLL 搜索顺序,颠倒了其他程序员的意图。
谁能建议一种方法来消除或解决这种歧义?
附:我知道 DLL 搜索顺序中的当前工作目录可能被解释为安全漏洞。尽管如此,这是默认行为,我的代码无法撤消它;我的代码需要与所有潜在调用者的期望相兼容,其中许多是大型且陈旧且超出我控制范围的。
【问题讨论】: