Всем привет, прошу помочь - может кто в теме... Есть удаленный комп, на него захожу обычно по RDP. На этом удаленном компе установлена какая-то следящая программа типа Mipko. На локальном компе работает эмулятор нажатий на клавиатуру и мышь. Эмуляцию можно делать либо прямой записью в порт клавиатуры(через драйвер), либо из ринг3 вызовом SendInput например. Вопрос. Может ли какая-либо прога на удаленном компе отличить SendInput от реального нажатия(или от записи в порт)?
Ввод от SendInput/keybd_event/mouse_event можно отличить от "реального" в хуке WH_KEYBOARD_LL/WH_MOUSE_LL. Проверяй флаги LLKHF_INJECTED/LLKHF_LOWER_IL_INJECTED и LLMHF_INJECTED/LLMHF_LOWER_IL_INJECTED.
Andrey333, ты не понял вопроса. Отличить реальное нажатие от SendInput на локальном компе я могу и мне это абсолютно не интересно. Я спрашиваю совершенно другое. Может ли программа на удаленном компе, который управляется по RDP отличить реальные нажатия от эмуляции? Эмуляция и реальные нажатия происходят не на том компе, где установлена прога, а передаются по RDP. Т.е. тут нужно хорошо разбираться, как работает протокол RDP и есть ли в нем разница между передачей эмулированного и реального ввода.
Какая-то очень странная постановка вопроса. RDP насколько я помню подразумевает создание отдельной сессии отдельного пользователя в отдельном рабочем столе, чисто технически "реального ввода" с клавиатуры в такой сессии быть не может. Таким образом эмулированный ввод будет в локальной сессии локального пользователя, удаленный - в другой. Как бы на этом технические тонкости службы RDP можно дальше не изучать: таки да, может с легкостью отличать, было бы зачем.
f13nd, ты тоже совсем не понял моего вопроса. Я даже и не знаю уже, как объяснить то.... Есть комп, он управляется по RDP, на этом компе стоит прога. Может ли эта прога отличить эмулированный и неэмулированный ввод, который приходит c другого компа по RDP? Для этого нужно хорошо знать протокол RDP, т.к. в случае реального ввода, по RDP может передаваться какой-то признак-флаг, что это реальный ввод и на удаленном компе виндовоз, получивши такой признак, будет писать напрямую в порт клавиатуры например. А если этот гипотетический флаг сброшен, то виндовоз на удаленном компе понимает, что это эмуляция и вызывает SendInput. В этом случае прога на удаленном компе сможет отличить реальность от эмуляции. Чтобы это проверить, нужно написать драйвер обработчик прерываний/отслеживатель записи в порт и запустить его на удаленном компе. Но у меня времени нет на это, я думал - вдруг кто-то знает, а никто не знает получается.