win32里,关于获取进程句柄的方法openpeocess总是返回失败
我对比了任务管理器里面的PID,确认了第一步里PID是获取的正确的,但是通过PID用openprocess获取进程句柄的时候总是返回NULL,
32和64都试了不行,管理员权限运行也不行,迷茫的,望大佬解答.下面是代码
程序代码:
//遍历进程并初始化进程信息到livstView VOID EPinitLISTV_Process_1() { //第一,枚举所有进程的PID-------------------------------------------------------- //枚举遍历进程的pid,放入procPID数组中 DWORD procPID[1024];//存放pid的数组 DWORD procSize = sizeof(procPID);//pid数组的字节大小 DWORD procByteNum;//遍历出来的字节数 DWORD procNum;//进程数 int a; a = EnumProcesses(procPID, procSize, &procByteNum); procNum = procByteNum / sizeof(DWORD); DBG("枚举返回值 = %d\n", a); DBG("进程字节数 = %d\n", procByteNum); DBG("进程数 = %d\n", procNum); //第二,通过PID获取进程的句柄------------------------------------------------------ //DBG("%x\n", OpenProcess(PROCESS_ALL_ACCESS, FALSE, procPID[10])); //通过PID的到进程的句柄 HANDLE* procHandle = (HANDLE*)malloc(procNum*(sizeof(HANDLE)));//存放进程句柄的缓冲区 for (size_t i = 0; i < procNum; i++) { procHandle[i] = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procPID[i]); if (procHandle[i] == NULL) { DBG("获取进程句柄失败!\n"); //return; } DBG("PID = %d = %08x\n", procPID[i], procHandle[i]); } }
我的运行结果如图