A сама SendInput с этими параметрами работает? тогда запость их сюда мне сейчас лень разбираться как их корректно задавать. кстати непонятно что мешает просто SendInput использовать.
Код (Text): void GenerateKeyService ( WORD vk) { KEYBDINPUT kinpt={0}; INPUT inpt={0}; // generate down inpt.type=INPUT_KEYBOARD; kinpt.wVk=vk; kinpt.time=NULL; kinpt.dwExtraInfo=NULL; kinpt.wScan=NULL; kinpt.dwFlags=NULL; inpt.ki=kinpt; NtUserSendInputServiceCall(1,&inpt,sizeof(inpt)); kinpt.dwFlags=KEYEVENTF_KEYUP; NtUserSendInputServiceCall(1,&inpt,sizeof(inpt)); return; }
wsd нет возможности без огромных трудностей это самый последний вариант отлаживать там так как ядерной отладкой системы я не владею
все пашет, если руки оттуда растут... WinDbg на локальной машине, виртуалка в сети, гугл в руки и вперед...
Y_MurSendInput работала но нестабильно как и все остальное почему и пришлось прибегнуть к более низкоуровневым версиям
Посмотрел - забавно, но возврат из sysenter происходит не на следующую после него команду retn, а на тот адрес что заносится в стек при вызове ntdll.KiFastSystemCall, значит нужно писать свою KiFastSystemCall состоящую из mov edx, esp sysenter retn ; <- лишняя команда ) Хотя непонятно как это может увеличить стабильность - ведь поседовательность действий та-же самая
Проверил - самопальная KiFastSystemCall тоже не работает, похоже дело в том что сервис проверяет по адресу возврата чтобы использовалась именно KiFastSystemCall из ntdll, подробнее проверить не могу, ядерный отладчик у меня не установлен.
Rel Собственно по аналогии с первым второе и сделано не понятно к чему это... punxer нет дело не в проверке, а в том, что хитрый компилятор просто "видит" что функция явно не использует параметры и игнорирует их. Значит либо отключать оптимизацию, либо довольствоваться SendInput.
этот вопрос адресован не вам, а ТС... не берите в голову... вполне возможно, но чтобы убедиться наверняка можно сделать вывод асм-листинга, компилятор студии это умеет делать...
wsd Собственно если разными ухищрениями вроде компиляции в дебаге или при выключенной оптимизации удастся повторить всё что делает SendInput это не даст ответ на главный вопрос "как увеличить стабильность работы кода?" простой перенос тех же команд из системных dll в свою прогу явно стабильности не добавит. punxer Возможно сбои при SendInput связаны с тем что компилятор при занесении структуры в стек разрушает регистр xmm0, тогда нужно бороться не с самой SendInput а с тем как перед её вызовом данные копируются в стек, хотя это только версия.
после 'sysenter' даже без UnhandledFilter падает, точнее на нем да не верю я блин что нельзя напрямую вызвать этот сервис
Rel asm листинг не нужен, всё и так смотрю в olly, там и видно и выкидывание "ненужных" параетров в самопальном варианте и разрушение xmm0 при вызове SendInput, а в этом случае (dll подгружаетс к навороченному приложению) это может оказаться критичным.