Я написал BHO для Internet Explorer, который перехватывает WinInet для изменения некоторых HTTP-запросов от IE путем перенаправления их на внутренний сервер.
Он прекрасно работает, когда я открываю первые 3 вкладки в IE, поскольку для каждой вкладки создается новый процесс iexplore.exe, каждая из которых загружает BHO.
Проблемы возникают, когда имеется более 4 вкладок: вместо создания нового процесса iexplore.exe существующие процессы повторно используются в другом потоке. Я могу подключить один и тот же процесс несколько раз (по 1 на поток) или только один раз. В обоих случаях происходит сбой при закрытии вкладок.
Пример: открыть вкладки 1 (отдельный iepxlore.exe), 2 (отдельный iepxlore.exe), 3 (отдельный iepxlore.exe) и 4 (поделиться iexplore с вкладкой 1). Закрыть вкладку 1. Обновить вкладку 4, IE вылетает внутри NDTDLL.DLL. Сбой происходит, если я ничего не делаю внутри подключенного WinInet.ddl (просто вызовите старую функцию)
Если я подключаю WinInet только один раз для каждого процесса iexplore.exe, я не могу перехватывать запросы на всех вкладках.
Мне интересно, как лучше поступить. Все примеры, которые я нашел до сих пор, предполагают, что на одну вкладку приходится 1 процесс iexpolore.exe.
Код хука WinInet основан на Пример кода проекта, Я просто подключаю меньше функций.
Похоже, указатель на старую функцию WinInet или на ту, которую я создал, больше не действует.
Если вы взяли большую часть примера кода с codeproject.com, у вас возникла серьезная проблема очистки.
Так вот что происходит:
Для исправления необходимо реализовать логику очистки при уничтожении CWininetHook :: ~ CWininetHook. Просто сделайте то, что делает конструктор, и верните исходный адрес.
Других решений пока нет …