Как найти исполняемый файл, который только что запустил пользователь? - PullRequest
1 голос
/ 08 января 2010

Я работаю над инфраструктурой тестирования, которая должна иметь возможность записывать действия пользователя и затем воспроизводить их. Я хорошо использую оболочки ManagedWinAPI для P / Invoke (работает в C #) для записи действий мыши и клавиатуры, что работает, но я думаю, что для того, чтобы сделать запись более полезной, мне нужно больше знать о том, что происходит, когда пользователь запускает приложение.

Чего я не знаю, так это как узнать, что приложение только что было запущено и каким оно было. Итак, предположим, что пользователь запустил мое приложение для записи, затем перешел в меню «Пуск» и нажал «Paint». Я хотел бы иметь возможность записать «Paint.exe», запускающийся как событие (или если бы они нажали на ярлык, который передал некоторые параметры это будет значение этого ярлыка, включая параметры), потому что, если я хочу воспроизвести запись на другом устройстве, пункты меню могут быть в разных местах, поэтому действие мыши может быть обманчивым.

Каким маршрутом мне нужно следовать, чтобы получить эти данные? Мне не удалось найти терминологию, поэтому я даже не нашел нужных вещей для поиска в поисковике ...

Ответы [ 2 ]

2 голосов
/ 10 января 2010

Правильный способ сделать это - написать драйвер и использовать обратные вызовы диспетчера процессов, чтобы получать уведомления при каждом создании процесса. Если вы не хотите этого делать, вы можете использовать управляемую библиотеку перехвата, такую ​​как EasyHook и перехватывать NtCreateThread / NtCreateThreadEx. Если вы не хотите делать , что , тогда вам просто нужно будет опросить новые процессы.

РЕДАКТИРОВАТЬ: определение того, запустил ли пользователь определенный процесс, также потребует от вас обхода стека. В режиме ядра вы можете использовать RtlWalkFrameChain, а в режиме пользователя вы можете использовать CaptureStackBackTrace.

РЕДАКТИРОВАТЬ 2: См. PsSetCreateProcessNotifyRoutine и PsSetCreateProcessNotifyRoutineEx .

1 голос
/ 08 января 2010

Библиотека справки по инструментам может сделать снимок текущих процессов. Позже это можно сравнить с другим снимком. Но так же, как прокомментировал «Нет возврата, нет возврата», этот метод не может определить, было ли действие пользователя запущено процессом.

...