Подробная информация о том, как и зачем это делать, разбросана по сети в разных местах, но лучшая экспозиция, которую я прочитал, находится в этом посте Игорь Тандетник (сокращено здесь для краткости):
Есть несколько технологических слоев
которые поддерживают загрузку и
навигация в Internet Explorer и
Веб-браузер управления. На вершине есть
это сам WebBrowser и объект MSHTML
который обеспечивает разбор HTML и
рендеринг. Клиент использует такой
интерфейсы как IWebBrowser2 и
IHTMLDocument2 для связи с
эти высокоуровневые объекты.
WebBrowser и MSHTML используют URL Monikers
библиотека для выполнения актуальных загрузок.
URLMon предоставляет свои услуги через
Интерфейсы IMoniker и IBinding, и
клиент (скажем, MSHTML) реализует
IBindStatusCallback и ряд
связанные интерфейсы, например
IHttpNegotiate или IAuthenticate.
Далее идет асинхронный плагин
Обработчик протокола. Приложение инкапсулирует
детали конкретного протокола,
например http, file или res.
...
В большинстве случаев это приложение
размещение элемента управления WebBrowser (или BHO
работает внутри IE) использует высокий уровень
услуги, предоставляемые WebBrowser и
Объекты MSHTML. Однако иногда
эти услуги недостаточны, и
требуется крючок нижнего уровня.
...
Было бы неплохо иметь возможность зацепить
в последовательность связи
между WebBrowser / MSHTML и URL
Monikers. К сожалению, есть
кажется, нет никакого способа сделать это - в
по крайней мере, ничего из того, что я знаю. Итак, мы
посмотрите на следующий уровень -
связь между URL-прозвищем
и приложение.
...
Теперь редко нужно
реализовать полномасштабное приложение от
царапина - ведь как часто делают новые
протоколы на самом деле определены? Но
для наших целей полезно
реализовать так называемое сквозное приложение
(Papp). PApp - это объект, который
реализует обе стороны URL
связь между моникером и приложением, то есть
он реализует как IInternetProtocol
и IInternetProtocolSink /
IInternetBindInfo. Мы регистрируем это как
временный обработчик для стандарта
протокол, такой как HTTP. Теперь всякий раз, когда
HTTP-запрос должен быть отправлен, URL
Моникер создаст экземпляр нашего
pAPP и попроси его сделать работу.
Затем pAPP создает экземпляр
стандартное приложение для протокола в
вопрос (я называю это целевым приложением, или
Тап, но помни, что я изобрел
сама терминология, это не
общепринятые, предложения по
лучше соглашение об именах приветствуются)
и действует как его клиент. С этой точки зрения,
наш pAPP становится общеизвестным
человек посередине. В самом простом
случай, любой вызов метода, сделанный URL
Моникер на pAPP пересылается на tAPP,
и любой вызов метода, сделанный TAPP на
pAPP пересылается обратно на URL Moniker.
ПАПП получает возможность наблюдать и, если
желательно, изменить каждый бит
информация, относящаяся к этому запросу
проходя вперед и назад между
Моникер и тап.