PDA

Просмотр полной версии : Асинхронный режим в WinInet


JuliaSmit
03.01.2009, 20:01
Ну собственно хотелось бы наглядно понять что это такое асинхронный режим и с чем его едять. Ну и проблема вот такого рода у меня необходимо считать данные при перехвате функции InternetReadFileEx делаю так.


type
far_jmp = packed record
PuhsOp: byte;
PushArg: pointer;
RetOp: byte;
end;

OldCode = packed record
One: dword;
two: word;
end;

var

JmpZwq9: far_jmp;
OldZwq9: OldCode;
PtrZwq9: pointer;


function TrueInternetReadFileEx(hFile: HINTERNET; lpBuffersOut: Pointer;
dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
var
Written:Dword;
begin
WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq9,@OldZwq9, SizeOf(OldCode), Written);
Result:= InternetReadFileEx(hFile,lpBuffersOut,dwFlags,dwCo ntext);
WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq9,@JmpZwq9, SizeOf(far_jmp), Written);
end;



function NewInternetReadFileEx(hFile: HINTERNET; lpBuffersOut: Pointer;
dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
var
Rec:PInternetBuffers;
F:File of Byte;
begin;
Result:=TrueInternetReadFileEx(hFile,lpBuffersOut, dwFlags,dwContext);
Rec:=lpBuffersOut;


AssignFile(F,'c:\1.data');
Rewrite(F);
BlockWrite(F,Rec^.lpvBuffer,Rec^.dwBufferLength);
CLoseFile(F);
end;


Procedure HookInternetReadFileEx;
var
Written:DWord;
Lib:Cardinal;
begin
Lib:=GetModuleHandle('wininet.dll');
if Lib=0 then
Lib:=LoadLibrary('wininet.dll');

PtrZwq9 := GetProcAddress(Lib,'InternetReadFileExA');
ReadProcessMemory(INVALID_HANDLE_VALUE, PtrZwq9, @OldZwq9, SizeOf(OldCode), Written);
JmpZwq9.PuhsOp := $68;
JmpZwq9.PushArg := @NewInternetReadFileEx;
JmpZwq9.RetOp := $C3;
WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq9, @JmpZwq9, SizeOf(far_jmp), Written);
end;


Получаю вместо html данных какой то бред ((( Вообщем трабл тут function NewInternetReadFileEx
может я не правельно понемаю структуру InternetBuffers или обращаюсь к указателю на html код незнаю... Помогите чем могите :-)

Основная задача изменять HTML данные в этой функции она вызываеться при обнавлении страницы.

p.S. С Новым Годом...

bons
04.01.2009, 17:55
попробуй так
BlockWrite(F,Rec^.lpvBuffer^,Rec^.dwBufferLength);
Если не помогло то укажи пожалуйста как у тебя описана структура PInternetBuffers