Как определить активное окно?

Тема в разделе "WASM.BEGINNERS", создана пользователем nrubefil, 15 июн 2008.

  1. nrubefil

    nrubefil New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    5
    Использую драйвер-фильтр клавиатуры, но хочеться знать в каком окне/приложении была нажата/отжата та или иная клавиша. Есть ли в ring0 аналоги GetFocus, GetForegroundWindow, GetActiveWindow? Или может ещё какой-то способ?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    user32.GetForegroundWindow:
    7E41BE4B > B8 94110000 MOV EAX,1194
    7E41BE50 BA 0003FE7F MOV EDX,7FFE0300
    7E41BE55 FF12 CALL DWORD PTR DS:[EDX]
    7E41BE57 C3 RETN


    Значит, она есть в Shadow SDT (NtUserGetForegroundWindow). Аттач к csrss + вызов её через int 2e.

    Код (Text):
    1. __declspec(naked) HANDLE NTAPI NtUserGetForegroundWindow()
    2. {
    3. __asm
    4. {
    5.   mov eax, 0x1194     // придется взять из user32.dll динамически
    6.   call Int2eCall
    7.   retn
    8. }
    9. }
    10.  
    11. ...
    12.  
    13. HANDLE GetForegroundWindow()
    14. {
    15.   PEPROCESS CsrssProcess = FindCsrssProcess();
    16.   KAPC_STATE ApcState;
    17.   KeStackAttachProcess (CsrssProcess, &ApcState);
    18.   HANDLE hForeground = NtUserGetForegroundWindow();
    19.   KeUnstackDetachProcess (&ApcState);
    20.   return hForeground;
    21. }
    предполагается, что Int2eCall и FindCsrssProcess очевидны
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ага?
    а как бы учитывается то, что могут быть фейковые csrss'ы, да и про сессии не надо забывать.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ну все-таки не так трудно найти процесс, у которого есть Shadow SDT.
     
  5. nrubefil

    nrubefil New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    5
    Спасибо за ответы, разобрался. Метод предложенный Great'ом в моём случае работает.
     
  6. nikifar

    nikifar New Member

    Публикаций:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    6
    nrubefil
    Можно ли чуть по подробней Int2eCall и FindCsrssProcess, я просто в этом новичёк, а задача передо мной такая же.