0

我是 C# hooking 的新手,正在寻找有关在哪里进行研究的一些信息。我想这里有些人可能以前做过这件事,可能知道从哪里开始!

我的总体目标很简单——创建一个 C# 应用程序,如果可能的话,它可以在机器上搜索当前正在运行的进程以查找与某个名称匹配的进程(我们可以假设它是唯一的,只有该名称的 1 个进程)并“挂钩”到这个过程中。目标是观察该过程是否被挂断。如果它崩溃、冻结或通常有 Windows 能够检测到的任何不良健康事件,我希望能够找到它。然后,根据它所看到的,它会做其他事情。

我可以在 Python 2.7 中使用 Pai Mei 做类似的事情,但该项目已被长期放弃,并且近年来我越来越喜欢 C#。

那么:这听起来像是在 C# 中可能发生的事情吗?如果是这样,有没有人对我在哪里可以找到一些信息有好的建议?最后,是否有人愿意在该主题上分享一些示例代码?=D

谢谢!

4

1 回答 1

1

ManagementEventWatcher可能有助于开始。但是,复杂性在于如何编写或调整 WMI 查询。

我不拥有以下代码,并且从某个地方被删减。

using System;
using System.Management;

class Process {
  public static void Main() {
    ManagementEventWatcher startWatch = new ManagementEventWatcher(
      new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
    startWatch.EventArrived += new EventArrivedEventHandler(startWatch_EventArrived);
    startWatch.Start();
    ManagementEventWatcher stopWatch = new ManagementEventWatcher(
      new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
    stopWatch.EventArrived += new EventArrivedEventHandler(stopWatch_EventArrived);
    stopWatch.Start();
    Console.WriteLine("Press any key to exit");
    while (!Console.KeyAvailable) System.Threading.Thread.Sleep(50);
    startWatch.Stop();
    stopWatch.Stop();
  }

  static void stopWatch_EventArrived(object sender, EventArrivedEventArgs e) {
    Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value);
  }

  static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) {
    Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value);
  }
}
于 2013-12-16T21:36:46.407 回答