|
|
|
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Разрабатываю ПО, на C++ Builder XE5, пробовал разные браузеры (указаны в топике) ... нигде нет возможности задать используемый клиентский сертификат, в браузерах на основе IE выскакивает штатное окно браузера с выбором сертификата, в хромиуме просто белая страница открывается. Весь инет перерыл, нигде не нашел решения, встречаются только вопросы подобные моему. Другие компоненты неподходят, нужен именно браузер. Сейчас буду вкорячивать Gecko ...
|
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Нашел неплохую альтернативу, Awesomium, теперь другая проблема не линкуется .lib-ка, перепробовал всякие варианты с штатным implib, coff2omf и Digital Mars-овским implib-ом, все равно, не видит функции. И незнаю, в этой теме писать, или отдельную создавать. Пока тут напишу, т.к. если продвинусь дальше, то буду описывать как работать с сертификатами.
Думаю что проблема в 00B490 THEADR Awe_DataPakSource_director_connect 00B4B7 COMENT Purge: Yes, List: Yes, Class: 160 (0A0h), SubClass: 1 (01h) Dynamic link import (IMPDEF) Imported by: name Internal Name: Awe_DataPakSource_director_connect Module Name: awesomium.dll Imported name: _Awe_DataPakSource_director_connect@8 00B516 MODEND В _ перед именем функции в Imported name Перебирал разные опции командной строки, не могу убрать "лишние" _ вообще |
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Добился такого
0009E0 THEADR Awe_DataPakSource_director_connect 000A07 COMENT Purge: Yes, List: Yes, Class: 160 (0A0h), SubClass: 1 (01h) Dynamic link import (IMPDEF) Imported by: name Internal Name: Awe_DataPakSource_director_connect Module Name: awesomium.dll 000A41 MODEND но все равно [ilink32 Error] Error: Unresolved external 'Awesomium::WebStringArray::~WebStringArray()' referenced from D:\PROJECTS\IP\WIN32\DEBUG\******* [ilink32 Error] Error: Unresolved external 'Awesomium::WebString::~WebString()' referenced from D:\PROJECTS\IP\WIN32\DEBUG\******* [ilink32 Error] Error: Unresolved external 'Awesomium::WebConfig::WebConfig()' referenced from D:\PROJECTS\IP\WIN32\DEBUG\********* [ilink32 Error] Error: Unresolved external 'Awesomium::WebCore::Initialize(Awesomium::WebConfig&)' referenced from D:\PROJECTS\IP\WIN32\DEBUG\********* |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
А Awesomium вообще под Builder? Если нет, то работать не будет, даже если вам и удасться каким то чудом ее прилинковать
|
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Тьфу, все правильно, так заработался, забыл что это не простые C типы. А если на VC написать библиотеку-враппер, которая экспортирует функции как C, а сама работает с Awesomium? Хотя с таким же успехом можно сразу пробовать CEF.
Это сообщение отредактировал(а) BasMan - 17.10.2013, 06:37 |
|||
|
||||
BasMan |
|
||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Выдалось свободное время, продолжил копать в этом направлении, накопал следующее, в Windows 7/2008 и выше, в urlmon.h присутствует интерфейс:
Судя по описанию, в приложении должна быть реализация данного интерфейса в виде класса, где будет перегружаться функция GetSerializedClientCertContext, при вызове которой можно подсунуть блоб с сертификатом/ключом. Вызывается как раз в момент "возникнования потребности" в пользовательском сертификате (по дефолту отображается диалоговое окно IE с выбором сертификата). Кто может подсказать, как правильно сделать реализацию? Вот фрагмент кода:
Заранее спасибо. |
||||
|
|||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Нашел на другом форуме:
1. Запросите (через QueryInterface) у IWebBrowser2 интерфейс IConnectionPointContainer. 2. Метод FindConnectionPoint с идентификатором DIID_DWebBrowserEvents2 вернет вам указатель на IConnectionPoint - это "точка", через которую можно подписаться на нужные события. 3. Вызываете pConnectionPoint->Advise, передаете туда указатель на свой объект. Объект этот должен быть наследником IDispatch. 4. Теперь на любые события будет вызываться метод Invoke этого объекта: первым аргументом придет тип события, напимер для DocumentComplete это будет DISPID_DOCUMENTCOMPLETE. Аргументы вызова, если нужно, достаются из массива DispParams (они там в обратном порядке лежат, Нужно запросить у XXXXX интерфейс HttpNegitiate || HttpNegitiate3 (?), метод FindConnectionPoint с идентификатором IID_IHttpNegotiate3 вернет указатель на IConnectionPoint . Нужно вызывать IConnectionPoint->Advise и передать туда указатель на свой объект наследник IDispatch. На любые события будет вызываться метод Invoke объекта, первым аргументом будет тип события (?) .... |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Каким боком связывание ActiveX события с приемником этого события (а именно это описанно в вашей цитате) относится к HttpNegitiate3, который судя по описанию вообще не ActiveX объект (и не унаследован от IDispatch) Информацию надо искать не на помойке (под названием Интернет), а у первоисточника - https://msdn.microsoft.com/en-us/library/ms...4(v=vs.85).aspx Там собственно сказано -
|
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Ок,
А каким образом заставить браузер обратиться к объекту? Я так понимаю через IServiceProvider? Тоже свою реализацию писать? |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Во первых -
Во вторых - методы от IHttpNegotiate2 вам тоже придется реализовать (т.к. IHttpNegotiate3 унаследован от IHttpNegotiate2) Замечательный вопрос. Лично я не уверен, что UrlMON имеет отношение к IE Вам скорее надо копать в сторону CryptoAPI, точнее к хранилищам сертификатов. Или куда то сюда - http://stackoverflow.com/questions/2577137...with-javascript |
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Я думаю имеет, т.к. в исходниках того же Chromium, FF и TEmbeddedWB есть упоминания интерфейса HttpNegotiate, вот фрагмент Chromium:
и это один маленький кусочек первый попавшийся по запросу "chrome httpnegotiate interface" |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Все возможно. Может быть и IE использует интерфейсы от UrlMon где то глубоко внутри себя, но как к ним достучаться снаружи - это вопрос.
Поверхостный поиск по MSDN в разделе IE результатов не дал. А на глубокий поиск у меня не хватит времени - там можно и неделю прокопаться
Это еще не значит, что и IE сделан так же Кстати, посмотрите куда этот UserAgentAddOn передается - может какой нибудь public API интерфейс найдется. |
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Может кому поможет.
Сделал так, программа при запуске очищает хранилище сертификатов (через certmgr.exe), в нужный момент (перед открытием страницы) устанавливает нужный сертификат в хранилище, страница открывается без лишних запросов, если нужно войти под другим сертификатом, снова очищаем хранилище, ставим нужный сертификат, открываем страницу. |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
За такой 'метод' ваши пользователи побъют вас ноутбуками (насмерть)
|
|||
|
||||
tzirechnoy |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: нет Всего: 16 |
"Нас не догонят!" |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |