OpenProcess()函数返回错误5、6、87 该怎么解决? (备注:按照CSDN某些博主的方法,已经对进程提权过了,但还是没用)

qq_49669968 2021-03-24 03:42:40
为了算出进程的资源占用情况,对long longunsigned long long 分别取别名为int64_time uint64_time
因为Windows操作系统中计时的方式和我们在生活中常用的时间计量单位不同,对时间进行格式化。
利用操作系统提供的获取进程数据的方式,编写相应函数。(例如,GetSystemInfo()函数用来获取操作系统的cpu个数;GetProcessTime()函数用来获取进程的创建和结束时间,用户态和核心态模式下运行的时间)
通过公式:
system_time = (formating(&kernel_time) + formating(&user_time)) / processer_count;
time = formating(&now);


计算出某一时刻内进程的时间信息和系统当前的时间信息。
再次循环之后,算出时间差:
system_time_delta = system_time - last_system_time;
time_delta = time - last_time;

最后利用公式:算出cpu使用率。
cpu_usage_rate = int((system_time_delta *100) / time_delta);
但是,获取时间的函数
GetProcessTimes(ProcessHandle,&creation_time,&exit_time,&kernel_time,&user_time)
需要进程句柄参数,而通过对所有进程进行快照,再把快照信息中的进程ID转换成句柄时,由于权限不够,出现错误。
HANDLE hProcessSnap;
PROCESSENTRY32 pe32 = {0;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(hProcessSnap,&pe32);
ProcessHandle = 0penProcess(PROCESs_ALL_ACCESS,false,pe32.th32ProcessID);
unsigned long kkk = GetLastError();
printf( "%d\n",kkk);



所以我在API操作手册上查了对OpenProcess的解释,我也找出了错误:




也就是跟GetLasterror()返回的错误码相符和。

我再试着对算法的进程提高权限,并且权限提高成功了,但是问题还是没有得到解决。







...全文
434 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧