Доброго времени суток.
Задача: перехватить хэдеры которые отправляет ИЕ.
Проблема: делаю перехват функции WinInet - HttpSendRequestW. Перехват срабатывает хорошо, но все входящие параметры равны "0" (Nil) кроме hRequest (проверял: если ему присвоить Nil и вызвать настоящую функцию - страница не грузится), через который я и хочу получить текущий хэдер. Для извлечения хэдера из hRequest вызываю функцию HttpQueryInfo, которая в итоге возвращает ошибку 12150: ERROR_HTTP_HEADER_NOT_FOUND (The requested header could not be located).
Есть пример на Си (который и пытаюсь повторить), так там все это хорошо отрабатывается.
Вот кусок моего кода:
Код | function Intercept_HttpSendRequestW(hRequest: HINTERNET; lpszHeaders: PChar; dwHeadersLength: DWORD; lpOptional: Pointer; dwOptionalLength: DWORD): BOOL; stdcall; var written: DWORD;
tszTemp: array [0..10239] of char; dwSize, lpdwReserved: DWORD;
begin
dwSize := 0; tszTemp := '';
FillChar(tszTemp, 10240, 0); dwSize := SizeOf(tszTemp);
if not HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF or HTTP_QUERY_FLAG_REQUEST_HEADERS, @tszTemp, dwSize, lpdwReserved) then ShowMessage(IntToStr(GetLastError));
WriteProcessMemory(GetCurrentProcess(), @adr_HSR, @oldHSR, 6, written); Result := adr_HSR(hRequest, lpszHeaders, dwHeadersLength, lpOptional, dwOptionalLength); WriteProcessMemory(GetCurrentProcess(), @adr_HSR, @jumpHSR, 6, written); end;
|
Кусок из примера:
Код | BOOL WINAPI CWininetHook::_HttpSendRequestW(HINTERNET hRequest, LPCWSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength ) { CMainFrame::GetRequestDlg().LogRequest(hRequest); TCHAR tszTemp[10240] = {0}; DWORD dwSize = sizeof(tszTemp); ZeroMemory( tszTemp, sizeof(tszTemp)); if ( HttpQueryInfo( hRequest, HTTP_QUERY_RAW_HEADERS_CRLF | HTTP_QUERY_FLAG_REQUEST_HEADERS , tszTemp, &dwSize, 0) ) { MessageBoxA(0, "Ok", "", 0); } return s_pfnHttpSendRequestW( hRequest, lpszHeaders, dwHeadersLength, lpOptional, dwOptionalLength); }
|
Может кто подскажет в чем может быть проблема, а то бьюсь уже третий день и все без толку  Вроде должно быть все просто, но в то же время ничего не получается. За ранее спасибо за любые ответы. |