Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HttpQueryInfo - ERROR_HTTP_HEADER_NOT_FOUND, HttpSendRequestW Hook 
:(
    Опции темы
Viy_2007
Дата 12.8.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 27.11.2007

Репутация: нет
Всего: нет



Доброго времени суток.

Задача: перехватить хэдеры которые отправляет ИЕ.

Проблема: делаю перехват функции 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);  
}  


Может кто подскажет в чем может быть проблема, а то бьюсь уже третий день и все без толку  smile
Вроде должно быть все просто, но в то же время ничего не получается.
За ранее спасибо за любые ответы.

Это сообщение отредактировал(а) Viy_2007 - 12.8.2010, 19:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.