![]() |
#2
a4514102024-12-21 15:13
|
但是通过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]);
}
}
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]);
}
}
我的运行结果如图
只有本站会员才能查看附件,请 登录