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