首页
社区
课程
招聘
很简单的一段代码,枚举进程,就是一直错,求赐教
发表于: 2013-5-1 15:03 4485

很简单的一段代码,枚举进程,就是一直错,求赐教

2013-5-1 15:03
4485
status=ZwQuerySystemInformation(
                        SystemProcessesAndThreadsInformation,
                        NULL,
                        0,
                        &ulSize
                        );
                if (status!=STATUS_INFO_LENGTH_MISMATCH)
                {
                        return FALSE;
                }

                pSystemProcessList= ExAllocatePool(NonPagedPool,ulSize);
                if (pSystemProcessList)
                {
                        status=ZwQuerySystemInformation(
                                SystemProcessesAndThreadsInformation,
                                pSystemProcessList,
                                ulSize,
                                NULL
                                );
                        if (!NT_SUCCESS(status))
                        {
                                if (DebugOn)
                                        KdPrint(("ZwQuerySystemInformation error:%x %d\r\n",status,RtlNtStatusToDosError(status)));

                                bRet = FALSE;
                        }
                }

第一个ZwQuerySystemInformation获取需要的大小,返回是成功的。
进入了红色的分支,也就是第二次查询的时候失败了,郁闷啊。。。返回是长度不匹配的错误,也就是那个mismatch-length的错。

另外好像第一个获取大小的时候,那个ulsize好像有几次不一样大。。搞不懂。。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
pSystemProcessList 大小不足

返回不足的时候把pSystemProcessList  FREE了 然后再申请.


for(;;)
{
    pSystemProcessList= ExAllocatePool(NonPagedPool,ulSize);
    if (pSystemProcessList)
    { 
      status=ZwQuerySystemInformation(
        SystemProcessesAndThreadsInformation,
        pSystemProcessList,
        ulSize,
        NULL
        );
     if (NT_SUCCESS(status))
          break;
      if (status == 长度不足)
      {
          ExFreePool(pSystemProcessList)
          ulSize += 512;
          continue;
      }

]


大概这样.
2013-5-1 16:41
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
这个我知道的,我的意思是为啥我上面的获取大小后,再用这个长度会错呢??
你这个是一直分配,直到大小足够啊~~~
2013-5-2 20:01
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
这个我还不太会解释.我的理解是因为返回回来的长度是一个结构的长度 比如UNICODE_STRING!但是,UNICODE_STRING里面的Buffer是个指针,所以长度明显要比UNICODE_STRING的长度长,所以获取到的内存大小明显就是不够的.
2013-5-2 22:08
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
貌似好了 无语了,memset了一把,貌似就好了,真心搞不懂,什么玩意啊 = =~~
2013-5-2 22:11
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
看来我是浪费表情了
2013-5-2 22:49
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
还是谢谢啦~~~
2013-5-2 23:07
0
游客
登录 | 注册 方可回帖
返回
//