Асинхронный режим в WinInet

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by JuliaSmit, 3 Jan 2009.

  1. JuliaSmit

    JuliaSmit New Member

    Joined:
    21 Dec 2007
    Messages:
    10
    Likes Received:
    2
    Reputations:
    0
    Ну собственно хотелось бы наглядно понять что это такое асинхронный режим и с чем его едять. Ну и проблема вот такого рода у меня необходимо считать данные при перехвате функции InternetReadFileEx делаю так.

    Code:
    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,dwContext);
    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. С Новым Годом...
     
    #1 JuliaSmit, 3 Jan 2009
    Last edited: 3 Jan 2009
  2. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    попробуй так
    Code:
    BlockWrite(F,Rec^.lpvBuffer[COLOR=Red]^[/COLOR],Rec^.dwBufferLength);
    Если не помогло то укажи пожалуйста как у тебя описана структура PInternetBuffers
     
    #2 bons, 4 Jan 2009
    Last edited: 4 Jan 2009