比如 我程序被打开后,就开始监控 ,如果有进程被打开 就写到我的列表框里面。我只是获得,不拦截或者对程序进行任何操作。所以 驱动就不需要了。有没办法用API实现?谁有这方面的源码啊?  就只需要获得打开的进程ID或者句柄皆可!!!

解决方案 »

  1.   

    lz参考下面文章,应该对你有帮助的剖析Windows任务管理器开发原理与实现
    http://www.vckbase.com/document/viewdoc/?id=809
      

  2.   


        9.进程/线程/模块信息
        在此我们使用工具帮助函数(ToolHelp32)和系统
        OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES,&hToken);
        //打开进程的令牌,提升权限;
        AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
        //将进程的权限提升到支持调试(Debug);
        CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        //创建进程的快照;
        Process32First(hProcessSnap,&ProcessEntry32);
        Process32First(hProcessSnap,&ProcessEntry32);
        //枚举所有进程;
        OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID);
        //打开特定进程,以查询进程相关信息;
        GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime);
        //获取进程的时间信息;
        GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter));
        //获取进程的存储区信息;
        GetPriorityClass(hProcess);
        //获取进程的优先权;
        GetProcessIoCounters(hProcess,&IoCounters);
        //获取进程的IO使用情况;
        CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
        //创建模块快照;
        Module32First(hModuleSnap, &ModuleEntry32);
        Module32Next(hModuleSnap, &ModuleEntry32);
        //枚举进程模块信息;
        CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
        //创建线程快照;
        Thread32First(hThreadSnap, &ThreadEntry32);
        Thread32Next(hThreadSnap, &ThreadEntry32);
        //枚举线程信息;
        OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID);
        //打开线程,须自己获得此函数地址;
        TerminateProcess(hProcess,0);
        //终止进程;
        SuspendThread(hThread);
        //悬挂线程;
        ResumeThread(hThread);
        //激活线程;
      

  3.   

    ring3就没有这样的函数可以直接实现。
    你可以开一个单独的线程去不断的循环调用2楼所说的函数去检查。
    不过,要是循环速度太快,系统的性能会受影响。太慢有不能适时觉察。
    感觉还是RING 0 方便。
      

  4.   

    Ring3:
    DeviceIoControl(YourDriver, StartMonitor, Ring3Start, xxxx);Ring0:
    if(Ring3Start)
    {
    // filter code
    }
    else
    {
    // log code
    }
      

  5.   

    不可以通过HOOK API OpenProcess  吗?注入到 explorer ?我记得好像可以吧,不过找不到这方面的资料 !
      

  6.   

    WMI也可以。谁有 发一份上来嘛 谢谢!WMI更好!对系统没影响!