Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.126.74] |
|
Сообщ.
#1
,
|
|
|
Приложение создает несколько копий iwebbrowser2 в разных процессах
Необходимо задать для каждого iwebbrowser2 свою папку с cookies Подскажите как это можно реализовать Добавлено А еще лучше задать для каждого iwebbrowser2 отдельную папку Temporary Internet Files |
Сообщ.
#2
,
|
|
|
Это детали работы внутренностей wininet, на базе которой построена сетевая часть IWebBrowser2.
Следовательно, штатно - никак; нештатная реализация очевидна: перехватить API, например, те, через которые wininet-библиотека получают путь к %userprofile% и др. директориям, в которых, в конечном итоге, будут лежать юзерские данные вроде Temporary Internet Files. |
Сообщ.
#3
,
|
|
|
IWebBrowser2 получает путь к временным файлам функцией RegQueryValue
С помощью Detour перехватил RegQueryValueA и RegQueryValueW static LSTATUS(WINAPI * TrueRegQueryValueW)(HKEY hKey, LPCWSTR lpSubKey, LPWSTR lpData, PLONG lpcbData) = RegQueryValueW; static LSTATUS(WINAPI * TrueRegQueryValueA)(HKEY hKey, LPCSTR lpSubKey, LPSTR lpData, PLONG lpcbData) = RegQueryValueA; LSTATUS WINAPI TimedRegQueryValueW(HKEY hKey, LPCWSTR lpSubKey, LPWSTR lpData, PLONG lpcbData) { LSTATUS lStatus = TrueRegQueryValueW(hKey, lpSubKey, lpData, lpcbData); return lStatus; } LSTATUS WINAPI TimedRegQueryValueA(HKEY hKey, LPCSTR lpSubKey, LPSTR lpData, PLONG lpcbData) { LSTATUS lStatus = TrueRegQueryValueA(hKey, lpSubKey, lpData, lpcbData); return lStatus; } BOOL CDlgWebBrowser::OnInitDialog() { CDialogEx::OnInitDialog(); DetourRestoreAfterWith(); LONG error = DetourTransactionBegin(); error = DetourUpdateThread(GetCurrentThread()); error = DetourAttach(&(PVOID&)TrueRegQueryValueW, TimedRegQueryValueW); error = DetourAttach(&(PVOID&)TrueRegQueryValueA, TimedRegQueryValueA); error = DetourTransactionCommit(); if (!m_pBrowser.Create(0, 0, WS_VISIBLE, rect, this, 3000)) return FALSE; m_lpBrowser = m_pBrowser.GetControlUnknown(); m_lpBrowser->put_Silent(-1); m_lpBrowser->Navigate2(&CComVariant(TEXT("https://www.google.com/")), &CComVariant(), &CComVariant(), &CComVariant(), &CComVariant()); return TRUE; } Не работает. В чем ошибка? |
Сообщ.
#4
,
|
|
|
Кажется ошибся. Вызывается RegQueryValueEx.
Переделал под RegQueryValueEx. Точка останова срабатывает, но параметры всегда одни и те же hKey = 0x00000396 {unused=??? } ТОЛЬКО ТУТ РАЗНЫЙ КЛЮЧ lpValueName = 0x00000000 <NULL> lpReserved = 0x00000000 {???} lpType = 0x00000000 {???} lpData = 0x0092db30 "I" lpcbData = 0x0092db24 {200} после вызова настоящей RegQueryValueEx lpcbData = 0x0092db24 {34} RegQueryValueEx возвращает 0 |