| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 75 人关注过本帖
标题:win32里,关于获取进程句柄的方法openpeocess总是返回失败
取消只看楼主 加入收藏
a451410
Rank: 2
等 级:论坛游民
帖 子:99
专家分:98
注 册:2018-3-4
结帖率:84.38%
收藏
 问题点数:5 回复次数:1 
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]);
    }

}

我的运行结果如图
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 进程 句柄 PID 获取 DWORD 
昨天 02:07
a451410
Rank: 2
等 级:论坛游民
帖 子:99
专家分:98
注 册:2018-3-4
收藏
得分:0 
经反复测试,大多数PID确实会返回NULL,但有一部分用户程序是返回正常的,
猜测,应该是系统类的进程不允许被获取,待我用快照方式获取一份对比下
昨天 15:13
快速回复:win32里,关于获取进程句柄的方法openpeocess总是返回失败
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018180 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved