代码之家  ›  专栏  ›  技术社区  ›  glenatron

如何查找用户刚启动的可执行文件?

  •  1
  • glenatron  · 技术社区  · 16 年前

    我正在开发一个测试框架,它需要能够记录用户的活动,然后回放它们。我可以在p/invoke周围使用managedwinapi包装器(在c中工作)来记录鼠标和键盘活动,但我认为为了使记录更有用,我需要了解用户启动应用程序时会发生什么。

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

    我需要遵循什么路线来获取这些数据?我找不到术语,所以我甚至没有真正正确的东西放进搜索引擎…

    2 回复  |  直到 16 年前
        1
  •  1
  •   gwell    16 年前

    这个 Tool Help Library 可以获取当前进程的快照。稍后可以将其与另一个快照进行比较。但是,正如不退款不返回注释一样,此方法无法确定是否是用户操作启动了该过程。

        2
  •  2
  •   wj32    16 年前

    正确的方法是编写驱动程序,并在每次创建流程时使用流程管理器回调获取通知。如果您不想这样做,可以使用一个托管挂钩库,如easyhook和hook ntcreatethread/ntcreatethreadex。如果你不想的话 那个 ,然后您只需要对新进程进行投票。

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

    编辑2:参阅 PsSetCreateProcessNotifyRoutine PsSetCreateProcessNotifyRoutineEx .