windows - 如何找到用户刚刚启动的可执行文件?

标签 windows pinvoke process

我正在开发一个测试框架,该框架需要能够记录用户的事件然后重播它们。我很好地使用围绕 P/Invoke 的 ManagedWinAPI 包装器(在 C# 中工作)来记录鼠标和键盘事件,这是有效的,但我认为为了使记录更有用,我需要更多地了解用户启动时发生的情况一个应用程序。

我不知道的是如何找到一个应用程序刚刚启动,它是什么应用程序。因此,假设用户启动了我的录音应用程序,然后转到开始菜单并单击“Paint”,我希望能够记录作为事件启动的“Paint.exe”(或者如果他们单击了传递一些参数的快捷方式这将是包含参数的快捷方式的值),因为如果我想在不同的机器上播放录音,菜单项可能位于不同的位置,因此鼠标事件可能具有欺骗性。

我需要遵循什么路线来获取这些数据?我一直没能找到术语,所以我什至没有真正把正确的东西放到搜索引擎中......

最佳答案

正确的方法是编写驱动程序并使用进程管理器回调在每次创建进程时获得通知。如果你不想这样做,你可以使用像 EasyHook 这样的托管 Hook 库,并 Hook NtCreateThread/NtCreateThreadEx。如果您不想那样做,那么您只需轮询新进程。

编辑:确定用户是否启动了特定进程也需要您遍历堆栈。在内核模式下,您可以使用 RtlWalkFrameChain,而在用户模式下,您可以使用 CaptureStackBackTrace。

编辑 2:参见 PsSetCreateProcessNotifyRoutinePsSetCreateProcessNotifyRoutineEx .

关于windows - 如何找到用户刚刚启动的可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2030056/

相关文章:

c++ - 查找应用程序处理程序?

c# - 从 C# Windows 应用程序调用 C dll 导致 svchost.exe 崩溃

c - 使用进程来计算文件数量

javascript - 如何在 Node 中的 process.exit 之后启动另一个进程

c - 兄弟管道比父子管道安全吗?

windows - 克隆 repo 时,remote-https 不是 git 命令

windows - 在 Windows 命令提示符下为 Perl 输出着色

c# - c# 中的 GetWindowText 返回一个矩形而不是文本

windows - ruby 。如何在 Windows 上的 irb 中复制和粘贴?

c# - 如何 P/调用分配并返回指向新数组的指针的函数