如何获得开打的进程? 比如 我程序被打开后,就开始监控 ,如果有进程被打开 就写到我的列表框里面。我只是获得,不拦截或者对程序进行任何操作。所以 驱动就不需要了。有没办法用API实现?谁有这方面的源码啊? 就只需要获得打开的进程ID或者句柄皆可!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 lz参考下面文章,应该对你有帮助的剖析Windows任务管理器开发原理与实现http://www.vckbase.com/document/viewdoc/?id=809 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); //激活线程; ring3就没有这样的函数可以直接实现。你可以开一个单独的线程去不断的循环调用2楼所说的函数去检查。不过,要是循环速度太快,系统的性能会受影响。太慢有不能适时觉察。感觉还是RING 0 方便。 Ring3:DeviceIoControl(YourDriver, StartMonitor, Ring3Start, xxxx);Ring0:if(Ring3Start){// filter code}else{// log code} 不可以通过HOOK API OpenProcess 吗?注入到 explorer ?我记得好像可以吧,不过找不到这方面的资料 ! WMI也可以。谁有 发一份上来嘛 谢谢!WMI更好!对系统没影响! window异常处理机制-过程,求指教 求 Visual C++ 网络高级编程 源码 已知两点之间距离,把距离延长 关于html转换为TXT的问题 日志文件监控及分析 请问一下在软件设计书上,应该用什么工具先画出界面? 一奇怪问题???CEdit控件显示不出来----在线等待急 关于服务器实现的问题 抠图加角度校调 给分帖:sam1111 进来(为什么我现在只能最多给100分?怪事) vc百例第9例 关于UDP传输问题,本人新手。
http://www.vckbase.com/document/viewdoc/?id=809
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);
//激活线程;
你可以开一个单独的线程去不断的循环调用2楼所说的函数去检查。
不过,要是循环速度太快,系统的性能会受影响。太慢有不能适时觉察。
感觉还是RING 0 方便。
DeviceIoControl(YourDriver, StartMonitor, Ring3Start, xxxx);Ring0:
if(Ring3Start)
{
// filter code
}
else
{
// log code
}