我正试图在我的机器上启动时监控每个进程。
启动后监控进程对此类没有问题:
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#中是否可以(以及如何)?
答案 0 :(得分:2)
如果要在执行单个指令之前可靠地停止进程,则需要使用自定义驱动程序。基本上你是在编写与防病毒软件相同的逻辑,所以只需遵循“write your own antivirus tutorial”
您的WMI方法kina可以工作,但可执行文件有时间在代码暂停之前运行一段时间。驱动程序几乎会使用相同的逻辑,但将使用进程挂钩,因此允许在允许进程启动之前执行其代码。