Как можно перейти в контекст процесса данного окна из хук-функции?

Тема в разделе "WASM.WIN32", создана пользователем ubil, 15 ноя 2006.

  1. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Это нужно, чтобы подгрузить в данный процесс(который я знаю по хендлу окна) dll-ку, в которой будет содержаться перехватчик оконной функции данного окна. У меня все приемлемо работает пока я имею дело только с одним окном, но в общем случе их может быть сколько угодно.
    ЗЫ: А все-таки мне тоже не совсем понятно, почему проходит такая фишка:
    Есть один процесс, он подгружает dll, вызывает ее функциию типа Init(), та ставит хук на создание окна... В какое-то время срабатывает хук, убеждается что это нужное окно, (!) и меняет оконную функцию этого окна на другую, которая находится в той же длл-ке, что и хук-функция, а значит в адресном пространстве первого процесса... Логично предположить, что функции, на которую заменили предудущую не придет ни одного сообщения, а перехваченное окошко зависнет. Но у меня такой код прекрасно работает и не падает:) ...Пока окошко которому заменили его функцию только одно...

    Разрулите, пожалуйста, кто-нибудь ситуацию:)
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Не совсем понял, что делаешь

    Хочешь внедрять свою Dll, в другой процесс при его создании?
    CreateRemoteThread, SetWindowsHookEx,
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows_NT\CurrentVersion\Windows\AppImt_DLLs
     
  3. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Booster
    А в моем случае будет достаточно CreateRemoteThread? Типа послать в этот поток адрес строки с полным именем длл, он загрузит куда надо ее экземпляр, вызовет нужные функции, без проблем? Только вот интересно как происходит передача параметра, адресные пространства ведь различные...

    Да, еще интересно, как по хендлу окна определить hProcess?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    GetWindowThreadProcessId()
    OpenProcess()
    VirtualAllocEx
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Из моего любимого Рихтера.
    2
    Из негоже.
    1
    Вообще рекомендую:
    Джеффри РИХТЕР - "Создание эффективных WIN32-приложений
    с учетом специфики 64-разрядной версии Windows"

    P.S. Упс опередили малёхо :).
     
  6. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Всем спасибо!
    Кстати, все-таки интересно почему код без внедрения длл работает?
    А еще - можно ли освободить(и как) память в данном процессе, выделенную с помощью VirtualAllocEx другим процессом?
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Код (Text):
    1. Кстати, все-таки интересно почему код без внедрения длл работает?
    Какой код, без внедрения, объясни попонятнее.
    SetWindowLongPtr, из другого процесса, конечно не будет работать. Для разных процессов это не сделано.
     
  8. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Код типа такого:
    Код (Text):
    1. LRESULT CALLBACK shellProc(int nCode,WPARAM wParam,LPARAM lParam)
    2. {
    3.     switch(nCode)
    4.     {
    5.     case HSHELL_WINDOWCREATED:
    6.         if(isTargetWindow((HWND)wParam))
    7.         {
    8.             hWnd = (HWND)wParam;
    9.             if(insertToolbar(hWnd))lpfnOldWindowProc = (WNDPROC)SetWindowLong(hWndOE,GWL_WNDPROC,(LONG)newWindowProc);
    10.         }
    11.         break;
    12.  
    13.     default:break;
    14.     }
    15.  
    16.     return CallNextHookEx(hHook,nCode,wParam,lParam);
    17. }
    ... В итоге при запуске одной программки ее тулбар содержит дополнительную заданную кнопочку, нажатия на которую фиксирует функция newWindowProc.
     
  9. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Я что-то не могу понять, что, в память выделенную для другого процесса с помощью VirtualAllocEx выделевший ее процесс может писать обычным memcpy или даже *p = ? Я ожидал, что есть функции типа WriteVirtualMemory, которые кроме того p еще требуют hProcess...
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нет
     
  11. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    упс. нашел. WriteProcessMemory
    wasm.ru/article.php?article=fb2