我们正在尝试开发一个小型应用程序,该应用程序可以监视在Windows计算机中执行的程序/进程。

如果程序/进程不应该运行,则应将其阻止。它的工作原理类似于防病毒软件。

这是基本思想。

我想知道挂接到OS上以获取有关尝试在计算机上运行的每个程序/进程的通知的方法。

最佳答案

最简单的方法是使用WMI。专门监视Win32_ProcessStartTrace。这比Win32_Process更好,因为它被设置为使用事件,而Win32_Process需要轮询,这会占用更多CPU。以下是在C#中的操作方法。首先,请确保已将System.Management设置为您的项目的引用。

    public System.Management.ManagementEventWatcher mgmtWtch;

    public Form1()
    {
        InitializeComponent();
        mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32_ProcessStartTrace");
        mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch_EventArrived);
        mgmtWtch.Start();
    }

    void mgmtWtch_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
    {
        MessageBox.Show((string)e.NewEvent["ProcessName"]);
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        mgmtWtch.Stop();
    }

每当您启动新流程时,该代码都会生成一个消息框。在这里,您可以检查白名单/黑名单并采取适当的措施。

09-04 00:33