首页
社区
课程
招聘
[原创]xp sp3下简单遍历ActiveProcessLinks获取进程
发表于: 2011-7-15 12:22 8660

[原创]xp sp3下简单遍历ActiveProcessLinks获取进程

2011-7-15 12:22
8660

先声明~我是小菜,初学windows驱动,欢迎各位大牛拍砖~~
先放代码~

/*
从ActiveProcessLink上遍历进程
*/
VOID GetProcess()
{
        //获取EPROCESS结构
        ULONG epadr = (ULONG)PsGetCurrentProcess();
        if((epadr == 0) || (epadr == 0xffffffff)){
                KdPrint(("Can't get the process!\n"));
                return;
        }

        //获取ActiveProcessLink链表,EPROCESS+0X88是ActiveProcessLink节点
        LIST_ENTRY* pActPro = (LIST_ENTRY*)(epadr + 0x88);
        LIST_ENTRY* bC = pActPro;
        //获取保存文件名的ImageFileName数组,EPROCESS+0X174是ImageFileName数组
        UCHAR* ImageFileName = (UCHAR*)(epadr + 0x174);
        do{
                KdPrint(("%s.\n",ImageFileName));
                //遍历链表
                pActPro = (LIST_ENTRY*)pActPro->Flink;
                //获得ImageFileName
                _asm{
                        mov eax,pActPro
                        add eax,236
                        mov ImageFileName,eax
                }
        }while(pActPro->Flink != bC);
}

#pragma LOCKEDCODE
extern "C" NTSTATUS DriverEntry (
                        IN PDRIVER_OBJECT pDriverObject,
                        IN PUNICODE_STRING pRegistryPath        )
{
#ifdef        DBG
        _asm int 3
#endif
        KdPrint(("进入驱动入口\n"));
       
        GetProcess();

        KdPrint(("DriverEntry end\n"));

        return STATUS_SUCCESS;
}

在EPROCESS中,ActiveProcessLinks域是一个双链表节点,在windows中,所有活动进程都连接在一起,构成一个双链表,表头是全局变量PsActiveProcessHead。当一个进程创建时,其ActiveProcessLinks域将作为节点加入到此链表中;当进程删除是,则从链表中移除。
但是为什么System Idle Process不能在链表中遍历出来呢?想不通。。。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 116
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
System Idle Process ID为0

本身就相当于不存在这个进程ID吧 他只是物理的一种表现。。。

说不清。。。
2011-7-28 03:49
0
雪    币: 116
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我抽时间又看了下 遍历出来有个ImageFileName是空的 那就是IDLE
2011-8-1 03:11
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
那个不是的,那只是PsActiveProcessHead这个链表头底下的一堆无关数据而已~~
2011-8-1 13:02
0
雪    币: 116
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢 achillis 大侠指点~
2011-8-5 09:53
0
游客
登录 | 注册 方可回帖
返回
//