Использую драйвер-фильтр клавиатуры, но хочеться знать в каком окне/приложении была нажата/отжата та или иная клавиша. Есть ли в ring0 аналоги GetFocus, GetForegroundWindow, GetActiveWindow? Или может ещё какой-то способ?
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): __declspec(naked) HANDLE NTAPI NtUserGetForegroundWindow() { __asm { mov eax, 0x1194 // придется взять из user32.dll динамически call Int2eCall retn } } ... HANDLE GetForegroundWindow() { PEPROCESS CsrssProcess = FindCsrssProcess(); KAPC_STATE ApcState; KeStackAttachProcess (CsrssProcess, &ApcState); HANDLE hForeground = NtUserGetForegroundWindow(); KeUnstackDetachProcess (&ApcState); return hForeground; } предполагается, что Int2eCall и FindCsrssProcess очевидны
nrubefil Можно ли чуть по подробней Int2eCall и FindCsrssProcess, я просто в этом новичёк, а задача передо мной такая же.