2010-05-26 30 views
1

GetDllDirectory產生一個模糊的值。當這個調用產生的字符串是空的,這意味着執行下列操作之一:如何處理GetDllDirectory生成的模糊值?

  • 沒有人叫SetDllDirectory
  • 有人通過NULLSetDllDirectory
  • 人傳遞了一個空字符串SetDllDirectory

前兩種情況相當於我的目的,但第三種情況是一個問題。如果我想寫保存/恢復代碼(請撥GetDllDirectory以保存「舊」值,SetDllDirectory臨時設置「新」值,然後SetDllDirectory再次恢復「舊」值),那麼我會冒險逆轉一些其他程序員的意圖。

如果其他程序員打算將當前工作目錄設置爲DLL搜索順序(換句話說,前兩個項目符號中的一個爲真),並且我將一個空字符串傳遞給SetDllDirectory,我將採取當前工作目錄移出DLL搜索順序,顛倒另一個程序員的意圖。

任何人都可以提出一種方法來消除或解決這個歧義?

P.S.我知道將DLL搜索順序中的當前工作目錄解釋爲安全漏洞。儘管如此,這是默認行爲,我的代碼無法撤銷該行爲;我的代碼需要與所有潛在呼叫者的期望保持一致,其中很多呼叫者都是大而古老的,並且超出了我的控制範圍。

回答

0

沒有解決這個問題。在一塊岩石和一塊堅硬的地方之間,你應該假設NULL通過了。已經有一種方法可以通過註冊表設置來啓用安全搜索。

+0

這將如我所料。另一方面,很難知道等待某人發佈一個好主意需要多長時間...... :-) – 2010-05-28 18:41:50

+0

@Integer:足夠長嗎? – 2010-06-04 20:52:53