Можно ли в Windows предотвратить перехват других приложений в системных DLL?

Я отчаянно ищу причину сбоев в моем приложении на основе Qt.

После некоторого наблюдения я обнаружил, что одно только открытие QFileDialog, который является стандартным диалоговым окном файлов Windows, даже без выбора какого-либо файла, приводит к сбою приложения через несколько минут. Это происходит не на всех машинах.

Я открыл свое приложение в обходчике зависимостей, и профилирование показало, что при открытии файлового диалога загружаются тонны DLL, которые мне не нужны в моем приложении — все инструменты, подключенные в оболочке Windows. Среди других — TortoiseSVN, который даже делает зависание.

Возможно ли в контексте приложения предотвратить загрузку других DLL, таких как кодеки или перехватчики оболочки?

По крайней мере возможно ли создать QFileDialog без загрузки всего инструмента, подключенного в окнах?

введите описание изображения здесь

4

Решение

Это определенно возможно, но это не тривиально. Что вам нужно сделать, это вставить хук API на LoadLibrary (и / или эквивалент нативного API.) Когда вызывается ваш хук, вы можете проверить имя файла DLL и решить, хотите ли вы передать его реальному LoadLibrary или верните ошибку.

Несколько мест, чтобы найти больше информации о хуках API:

Теперь, учитывая все вышесказанное, для вашей конкретной ситуации вам может быть лучше просто изменить настройки TortoiseSVN. Если вы зададите пути включения / исключения в Tortoise, чтобы просматривать только каталоги на вашем компьютере, содержащие репозитории SVN, то держу пари, что эта блокировка исчезнет, ​​если вы избежите этих каталогов.

2

Другие решения


По вопросам рекламы [email protected]