проблемы c InternetStatusCallback

Тема в разделе "WASM.WIN32", создана пользователем vaaah, 5 янв 2009.

  1. vaaah

    vaaah New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2009
    Сообщения:
    4
    Всем привет.
    Хукаю в ишаке InternetStatusCallback
    заменяю в нем lpfnInternetCallback, на свой обработчик такого вида(из msdn)

    Код (Text):
    1. void CALLBACK CallMaster(
    2.     HINTERNET hInternet,
    3.     DWORD dwContext,
    4.     DWORD dwInternetStatus,
    5.     LPVOID lpvStatusInformation,
    6.     DWORD dwStatusInformationLength
    7. )
    8. {
    9.  
    10.     REQUEST_CONTEXT *cpContext;
    11.     cpContext = (REQUEST_CONTEXT*)dwContext;
    12.     char szStatusText[80];
    13. //  MessageBox( 0, "callback", "hook", 0 );
    14.  
    15.     switch (dwInternetStatus)
    16.     {
    17.         case INTERNET_STATUS_CLOSING_CONNECTION:
    18.             wsprintf( szStatusText,
    19.                           "%s CLOSING_CONNECTION", cpContext->szMemo );
    20.             break;
    21.         case INTERNET_STATUS_CONNECTED_TO_SERVER:
    22.             wsprintf( szStatusText,
    23.                           "%s CONNECTED_TO_SERVER", cpContext->szMemo );
    24.             break;
    25.         <..........................>
    26.         case INTERNET_STATUS_STATE_CHANGE:
    27.             wsprintf( szStatusText,
    28.                                       "%s STATE_CHANGE", cpContext->szMemo );
    29.             break;
    30.         default:
    31.         wsprintf( szStatusText,
    32.                            "%s Unknown Status %d Given",
    33.                            cpContext->szMemo,    dwInternetStatus);
    34.             break;
    35.     }
    36.    
    37.     MessageBox( 0, szStatusText,"Callback", 0 );
    38.  
    39. }
    мессаджбоксы вываливаются нормально, т.е. каллбэк работает, проблема в том что при этом в самом браузере ничего не отображается, т.е. пустая страница, почитал msdn ничего адекватного не нашел, так же наткнулся на пару примеров у китайчегов все так же, результат работы один и тот же
    ткните носом в доку или кодес или объясните плз, буду очень признателен
     
  2. sambd

    sambd New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2007
    Сообщения:
    60
    собственно а где ты вызываешь оригинальный обработчик? без него ИЕ не получит ничего!
     
  3. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    нужно сохранять заданый колбек для сессии и подменять своим, а из своего вызывать оригинальный, конечно когда ничего не надо скрывать в нотификаторе..
     
  4. vaaah

    vaaah New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2009
    Сообщения:
    4
    barton
    спасибо, сделал как ты и написал

    проблема в следущем
    Код (Text):
    1. typedef INTERNET_STATUS_CALLBACK ( WINAPI *mInternetStatusCallbackRet )( HINTERNET hInternet, DWORD dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength );
    2. mInternetStatusCallbackRet InternetStatusCallbackRet;
    3.  
    4. INTERNET_STATUS_CALLBACK HOOK_InternetStatusCallback( HINTERNET hInternet, DWORD dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength )
    5. {
    6. //  MessageBox( 0, "ok", "ok", 0 );
    7.     return InternetStatusCallbackRet( hInternet, dwContext, dwInternetStatus, lpvStatusInformation, dwStatusInformationLength );
    8. }
    9.  
    10. INTERNET_STATUS_CALLBACK HOOK_InternetSetStatusCallback( HINTERNET hInternet, INTERNET_STATUS_CALLBACK lpfnInternetCallback )
    11. {
    12.     InternetStatusCallbackRet = (mInternetStatusCallbackRet)lpfnInternetCallback;
    13.  
    14.     return REAL_InternetSetStatusCallback( hInternet, (INTERNET_STATUS_CALLBACK)HOOK_InternetStatusCallback );
    15. }
    управление передается на мой InternetStatusCallback, но при вызове оригинального каллбэка ослик падает, я так понял ошибка в адрессе оригинальной функции или их типы не совпадают?