*任何*进程启动时收到通知,然后冻结/暂停/暂停它

时间:2016-03-29 19:04:39

标签: c# windows process

我正试图在我的机器上启动时监控每个进程。

启动后监控进程对此类没有问题:

class ProcessHelper
{
    ManagementEventWatcher processListener;
    public ProcessHelper()
    {
        processListener = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
        processListener.EventArrived += new EventArrivedEventHandler(ProcessListener_ProcessStarted);
        processListener.Start();
    }

    PropertyDataCollection.PropertyDataEnumerator propEnum;
    private void ProcessListener_ProcessStarted(object sender, EventArrivedEventArgs e)
    {
        propEnum = e.NewEvent.Properties.GetEnumerator();

        while(propEnum.MoveNext())
        {
            //DoMyStuff
        }
    }

    public void stopListener()
    {
        processListener.Stop();
    }
}

但我希望在 进程开始之前执行 ,并中断其启动。

我的目标是: 我希望在流程开始时收到通知。我还需要它的完整文件路径。 然后我想打断开始。 (让我们称之为“冻结”过程)

当进程被冻结时,我想做一些检查,然后杀死它或让它开始。

// EDIT

我想我发现了如何冻结流程,in this thread

所以我“只是”需要知道如何在进程启动时收到通知,立即冻结它。

使用C / C ++库是没问题的。

我想用.NET Framewok 2.0 - 4.0

开发应用程序

是否有人知道C#中是否可以(以及如何)?

1 个答案:

答案 0 :(得分:2)

如果要在执行单个指令之前可靠地停止进程,则需要使用自定义驱动程序。基本上你是在编写与防病毒软件相同的逻辑,所以只需遵循“write your own antivirus tutorial

您的WMI方法kina可以工作,但可执行文件有时间在代码暂停之前运行一段时间。驱动程序几乎会使用相同的逻辑,但将使用进程挂钩,因此允许在允许进程启动之前执行其代码。