Как можно справиться с неоднозначным значением, созданным GetDllDirectory?

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

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

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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам