Я пытаюсь сделать сисколл из x86 процесса через Heaven's Gate т.е. Код (ASM): mov r10,rcx mov eax,1403h syscall ret из wow64 процесса к win32k апи: Код (C): NtUserRegisterRawInputDevices Код который вызывает сисколы прекрасно работает с сисколами ntoskrnl.exe, однако видимо для win32k.sys требуется ещё какая-то работа. При этом сискол к Код (C): NtUserRegisterRawInputDevices возвращает STATUS_SUCCESS, однако я не получаю событий WM_INPUT. При этом если вызывать через ntdll, то всё работает нормально. Какая дополнительная работа необходима для проведения сисколлов из wow64 к win32k.sys апи? User32.dll уже инициализирован в приложении при вызове, создано окно.
Ну один косяк я сам исправил, нужно было подсунуть адрес который выровнен по x64 границе. Но всё равно в итоге кидает в ответ 1 в eax. Щас накачу виртуалку попытаюсь в кернеле БП поставить на NtUserRegisterRawInputDevices, и посмотреть что именно ей не нравится
> сисколл из x86 процесса через Heaven's Gate т.е. Смотрим архитектурные маны, конкретно обработку syscall: if CS.L != 1.. then #UD Это значит что исполнение данной инструкции возможно лишь в 64 моде. Из под wow инструкция приведёт к исключению ILLEGAL_INSTR. > NtUserRegisterRawInputDevices возвращает STATUS_SUCCESS, однако я не получаю событий WM_INPUT. Эта апи не приводит к вызову кернел нотифи. Тоесть вначале нужно помотреть что за апи https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-registerrawinputdevices А только потом задавать вопросы. И незачем лезть в ядро гуя, если при вызове сервиса косяк со стеком.