Как можно справиться с неоднозначным значением, созданным GetDllDirectory? - PullRequest
1 голос
/ 26 мая 2010

GetDllDirectory дает неоднозначное значение. Когда строка, создаваемая этим вызовом, пуста, это означает одно из следующего:

  • никто не звонил SetDllDirectory
  • кто-то передал NULL SetDllDirectory
  • кто-то передал пустую строку SetDllDirectory

Первые два случая эквивалентны для моих целей, но третий случай - это проблема. Если я хочу написать код сохранения / восстановления (позвоните GetDllDirectory, чтобы сохранить «старое» значение, SetDllDirectory, чтобы временно установить «новое» значение, а затем SetDllDirectory снова, чтобы восстановить «старое» значение), я рискнуть изменить намерения другого программиста.

Если другой программист намеревался, чтобы текущий рабочий каталог находился в порядке поиска DLL (другими словами, одна из первых двух маркировок верна), и я передаю пустую строку в SetDllDirectory, я буду принимать текущий рабочий каталог вне порядка поиска DLL, полностью изменяя намерения другого программиста.

Может кто-нибудь предложить подход, чтобы устранить или обойти эту двусмысленность?

P.S. Я знаю, что наличие текущего рабочего каталога в порядке поиска DLL может быть истолковано как дыра в безопасности. Тем не менее, это поведение по умолчанию, и мой код не в состоянии отменить это; мой код должен быть совместим с ожиданиями всех потенциальных абонентов, многие из которых являются большими и старыми и находятся вне моего контроля.

1 Ответ

0 голосов
/ 26 мая 2010

Нет исправления для этого. Между камнем и наковальней, вы должны предположить, что NULL пропущен. Уже есть способ включить безопасный поиск с помощью параметра реестра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...