#c #windows #dll #windows-security
#c #Windows #dll #windows-безопасность
Вопрос:
У меня забавная проблема:
Программа, которую я написал, использует DLL. После установки как exe-файл программы, так и DLL находятся под c:Program Файлы (x86)MyProduct
Обычно загруженная DLL является драйвером третьего производителя. В целях тестирования я заменил его своей собственной реализацией. Когда я перезаписываю стороннюю библиотеку DLL своей собственной в папке program files, моя программа EXE не может запустить DLL, LoadLibraray возвращает 0, а GetLastError возвращает -529697949. Теперь, когда я копирую всю папку MyProduct в, скажем c:temp и запустите программу EXE, DLL может быть загружена.
Итак, я предполагаю, что моя проблема связана с безопасностью Windows. И программа, и моя версия библиотеки DLL написаны на C . Мой пользовательский аккаунт имеет доступ администратора, и, похоже, не имеет значения, выполняю ли я программу от имени администратора или нет. Кто-нибудь знает, существует ли механизм защиты Windows, который может предотвратить загрузку библиотеки DLL?
Спасибо
Обновить
Я думаю, проблема связана с тем фактом, что моя DLL пытается выполнить запись в каталог выполнения в функции инициализации DLL. При выполнении в каталоге Program Files Windows этого не допускает.
Комментарии:
1. -529697949 — это 0xE06D7363, код исключения для исключения C . Вам понадобится исходный код и отладчик, чтобы выяснить, почему было вызвано это исключение.
2. Да, я уже читал об этом, поэтому я понял, что ym DLL main выдает неперехваченное исключение, но, похоже, это не так. Поскольку DLL загружается при запуске программы, я подумал, что будет сложно подключить отладчик к программе до загрузки DLL. Из-за проводного поведения при копировании папки вне program files я предположил, что моя проблема заключается в функции безопасности Windows.
3. Нет, этот код исключения очень специфичен для исключения C . Windows не генерирует подобное значение. Где-то есть программист, который может помочь вам с этим, шансы, что вы найдете его здесь, равны нулю. Возьмите телефон и позвоните ему.
4. 😉 поэтому, я думаю, мне нужно подключить отладчик. Дело в том, что я тестовым способом внедрил пустой DllMain и все равно получил тот же результат. Вместе с тем фактом, что DLL фактически запускается, когда она не находится в Program Files, позвольте мне подумать о функции безопасности. Но я дам отладчику шанс…
5. @HansPassant: скорее всего, он получит сигнал занятости.
Ответ №1:
Да, я наконец запустил ее. Проблема в том, что моя DLL пыталась выполнить запись в папку exe во время инициализации DLL. Windows, похоже, обнаруживает это, и вызов LoadLibrary завершается с ошибкой.
Комментарии:
1. Вероятно, происходит то, что ваш код выдает исключение, когда он не может выполнить запись в файл. Именно это исключение препятствует загрузке библиотеки DLL.