这个还真不清楚,不过写驱动是肯定能实现的,用PsSetCreateProcessNotifyRoutine注册一个启动进程的通知,在回调函数里获取进程相关信息,用事件机制通知应用层获取相应内容即可

解决方案 »

  1.   

            static void Main(string[] args)
            {
                ManagementScope scope = new System.Management.ManagementScope(@"\\.\root\CIMV2");
                WqlEventQuery query = new WqlEventQuery(
                    "__InstanceCreationEvent",
                new TimeSpan(0, 0, 1),
                "TargetInstance isa \"Win32_Process\"");
                ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query);
                watcher.EventArrived += (s, e) => {
                    Console.WriteLine("Process {0} has been created.",
                        ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value).Properties["Name"].Value.ToString());
                };
                watcher.Start();            Console.ReadKey();
            }
      

  2.   

    大师,你说的这个东东应该可以,不过能不能帮我写下代码:当系统创建了新进程,程序就输出该进程的名称。
    我献上100分哦,见笑了。vs2008开发的,XP 32bit下测试没有问题,如果是其他系统,请自己改相应偏移
    例子
      

  3.   

    大师,你说的这个东东应该可以,不过能不能帮我写下代码:当系统创建了新进程,程序就输出该进程的名称。
    我献上100分哦,见笑了。vs2008开发的,XP 32bit下测试没有问题,如果是其他系统,请自己改相应偏移
    例子
    谢谢了,不过怎么是c++的?而且在vs2008里编译出错,
    错误 1 fatal error C1083: 无法打开包括文件:“ntdll.h”: No such file or directory d:\documents and settings\administrator\桌面\processnotify\process_ring3\process_ring3.cpp 8 Process_Ring3
    错误 2 error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成文件项目操作" ProcessNotify.WXP ProcessNotify.WXP有没有c#的例子啊,感觉好繁琐哦~~
      

  4.   

    4楼的办法是C#的,轮询?也算可以吧,我整理下,录以备忘:
    ManagementScope scope = new ManagementScope(@"\\.\root\CIMV2");
    WqlEventQuery query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\"");
    ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query);
    watcher.EventArrived += (s, e) =>
    {
    Console.WriteLine("Process {0} has been created.", (e.NewEvent.Properties["TargetInstance"].Value as ManagementBaseObject).Properties["Name"].Value);
    };
    watcher.Start(); Console.ReadKey();
      

  5.   

    大师,你说的这个东东应该可以,不过能不能帮我写下代码:当系统创建了新进程,程序就输出该进程的名称。
    我献上100分哦,见笑了。vs2008开发的,XP 32bit下测试没有问题,如果是其他系统,请自己改相应偏移
    例子
    谢谢了,不过怎么是c++的?而且在vs2008里编译出错,
    错误 1 fatal error C1083: 无法打开包括文件:“ntdll.h”: No such file or directory d:\documents and settings\administrator\桌面\processnotify\process_ring3\process_ring3.cpp 8 Process_Ring3
    错误 2 error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成文件项目操作" ProcessNotify.WXP ProcessNotify.WXP有没有c#的例子啊,感觉好繁琐哦~~我都说了写的驱动,只能用C
      

  6.   

    大牛,顺便把问句,怎么监视死掉了的进程····就是 某个进程被关闭额···ManagementScope scope = new System.Management.ManagementScope(@"\\.\root\CIMV2");
    WqlEventQuery query2 = new WqlEventQuery(
                    "__InstanceDeletionEvent",
                    new TimeSpan(0, 0, 1),
                "TargetInstance ISA \"Win32_Process\"");
                ManagementEventWatcher watcher2 = new ManagementEventWatcher(scope, query2);
                watcher2.EventArrived += (s2, e2) => {
                    Console.WriteLine("Process {0} has been deleted.",
                        ((ManagementBaseObject)e2.NewEvent.Properties["TargetInstance"].Value).Properties["Name"].Value.ToString());
                };
                watcher2.Start();
    这个只能“监视”,不知能不能判断它是否“正常”关闭。
      

  7.   

    大牛,顺便把问句,怎么监视死掉了的进程····就是 某个进程被关闭额···ManagementScope scope = new System.Management.ManagementScope(@"\\.\root\CIMV2");
    WqlEventQuery query2 = new WqlEventQuery(
                    "__InstanceDeletionEvent",
                    new TimeSpan(0, 0, 1),
                "TargetInstance ISA \"Win32_Process\"");
                ManagementEventWatcher watcher2 = new ManagementEventWatcher(scope, query2);
                watcher2.EventArrived += (s2, e2) => {
                    Console.WriteLine("Process {0} has been deleted.",
                        ((ManagementBaseObject)e2.NewEvent.Properties["TargetInstance"].Value).Properties["Name"].Value.ToString());
                };
                watcher2.Start();
    这个只能“监视”,不知能不能判断它是否“正常”关闭。是否正常关闭不需要了,我只需要知道他是否是被关掉了··
    再问下,用这个方法的话,性能怎么样?
      

  8.   

    好贴,学习下 wmi  or wqlevent