1

GetDllDirectoryあいまいな値を生成します。この呼び出しで生成される文字列が空の場合、次のいずれかを意味します。

  • 誰も呼んでいないSetDllDirectory
  • 誰かが渡さNULLれたSetDllDirectory
  • 誰かが空の文字列をに渡しましたSetDllDirectory

最初の2つのケースは私の目的では同等ですが、3番目のケースは問題です。保存/復元コードを記述したい場合(GetDllDirectory「古い」値を保存するために呼び出しSetDllDirectory、一時的に「新しい」値を設定し、後でSetDllDirectory「古い」値を復元するために呼び出す)、他のプログラマーの意図を逆転させるリスクがあります。

他のプログラマーが現在の作業ディレクトリをDLL検索順序にすることを意図していて(つまり、最初の2つの箇条書きの1つが真である場合)、空の文字列をに渡すとSetDllDirectory、現在の作業ディレクトリがDLLの検索順序、他のプログラマーの意図を逆にします。

誰かがこの曖昧さを排除または回避するためのアプローチを提案できますか?

PS DLLの検索順序に現在の作業ディレクトリがあると、セキュリティホールとして解釈される可能性があることを私は知っています。それにもかかわらず、これはデフォルトの動作であり、私のコードはそれを元に戻すことができません。私のコードは、すべての潜在的な呼び出し元の期待と互換性がある必要があります。その多くは大きくて古く、私の制御が及ばないものです。

4

1 に答える 1

0

これに対する修正はありません。岩と固いところの間では、NULL が渡されたと想定する必要があります。レジストリ設定で安全な検索を有効にする方法は既にあります。

于 2010-05-26T17:58:52.783 に答える