我们正在尝试开发一个小应用程序,它可以监控在windows机器上执行的程序/进程。
如果程序/进程不应该运行,它应该被阻塞。它的工作原理类似于杀毒软件。
这是基本的想法。
我想知道连接到操作系统的方法,以便获得关于试图在机器上运行的每个程序/进程的通知。
发布于 2009-02-15 04:04:43
最简单的方法是使用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();
}每次启动新进程时,代码都会生成一个消息框。从那里,您可以检查白名单/黑名单,并采取适当的行动。
发布于 2009-02-04 07:51:39
我还没有尝试过获得实时通知。无论如何,下面是如何在C#中运行进程
using System.Diagnostics;
//Somewhere in your method
Process[] runningList = Process.GetProcesses();
foreach(Process p in runningList){
Console.WriteLine("Process: {0} ID: {1}", p.ProcessName, p.Id);
}您还可以使用流程的以下特性
中的线程集合
发布于 2009-02-04 08:30:32
我会用常量WH_GETMESSAGE检查Win32-api SetWindowsHookEx,以便在创建新窗口时向您的程序添加回调。
http://pinvoke.net/default.aspx/user32.SetWindowsHookEx
谷歌API和WH_GETMESSAGE可以找到更多信息。
还可以查看以下文章/代码库:http://www.vbaccelerator.com/home/Vb/Code/Libraries/Hooks/vbAccelerator_Hook_Library/article.asp
http://www.codeproject.com/KB/DLL/hooks.aspx?fid=2061&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=76&select=726975
https://stackoverflow.com/questions/510372
复制相似问题