Как можно справиться с неоднозначным значением, созданным GetDllDirectory?
GetDllDirectory
производит неоднозначное значение. Когда строка, которую производит этот вызов, пуста, это означает одно из следующего:
- никто не звонил
SetDllDirectory
- кто-то прошел
NULL
вSetDllDirectory
- кто-то передал пустую строку
SetDllDirectory
Первые два случая эквивалентны для моих целей, но третий случай является проблемой. Если я хочу написать код сохранения / восстановления (позвоните GetDllDirectory
чтобы сохранить "старое" значение, SetDllDirectory
установить "новое" значение временно, а позже SetDllDirectory
снова, чтобы восстановить "старое" значение), я рискую обратить вспять намерения других программистов.
Если другой программист намеревался, чтобы текущий рабочий каталог находился в порядке поиска DLL (другими словами, одна из первых двух маркировок - true), и я передаю пустую строку SetDllDirectory
Я буду извлекать текущий рабочий каталог из порядка поиска DLL, полностью изменяя намерения другого программиста.
Кто-нибудь может предложить подход, чтобы устранить или обойти эту двусмысленность?
PS Я знаю, что наличие текущего рабочего каталога в порядке поиска DLL может быть истолковано как дыра в безопасности. Тем не менее, это поведение по умолчанию, и мой код не в состоянии отменить это; мой код должен быть совместим с ожиданиями всех потенциальных абонентов, многие из которых являются большими и старыми и находятся вне моего контроля.
1 ответ
Не исправить для этого. Между камнем и наковальней, вы должны предположить, что NULL пропущен. Уже есть способ включить безопасный поиск с помощью параметра реестра.