Не удается запустить мою DLL-библиотеку при копировании в Program Files (x86)

#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.