Как защитить себя от оболочки DLL, загруженной в ваш процесс? - PullRequest
4 голосов
/ 18 сентября 2008

При использовании стандартного диалогового окна Windows «Открытие файла» с использованием GetOpenFileName () оболочка загружает различные библиотеки DLL, необходимые для отображения списка файлов, включая пользовательские.

В моем приложении я обнаружил, что библиотека DLL, которую TortoiseCVS использует для рисования оверлеев на значках, вызывает GdiPlusShutdown (), и поэтому через некоторое время после отображения диалогового окна «открытие файла» библиотека TortoiseCVS будет выгружена, она закроется вниз GDI + и все мои графические функции потерпят неудачу!

Кажется, довольно плохо, что в принципе любое старое DLL может быть загружено моим приложением в любое время и начать делать случайные вещи в своем состоянии. Обходной путь в моем случае был довольно прост - просто перезапустите GDI +, если я обнаружу, что он выключен. Однако если бы это произошло на компьютере клиента, где я не смог его отладить, было бы намного сложнее выяснить, что происходит.

Кто-нибудь может предложить какое-нибудь понимание? Что я мог сделать, чтобы это не произошло?

1 Ответ

1 голос
/ 18 сентября 2008

Мне приходилось иметь дело с дерьмом, которое Dell ставит на свои машины, в частности wxVault. Моим решением было «просто» пропатчить код. Немного сложно с DEP, но все же выполнимо. Вы могли бы взглянуть на Microsoft Detours, который является немного более структурированным способом сделать то же самое. У вас все еще есть загрузка DLL, но вы можете, по крайней мере, остановить вызов функций, которые он не должен вызывать.

Чтобы узнать, почему в Windows такой дурацкий механизм, прочитайте блог или книгу Рэймонда Чена «Старая новая вещь».

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