首页
社区
课程
招聘
[旧帖] [求助]读取驱动中的链表蓝屏 0.00雪花
发表于: 2015-12-5 18:25 1518

[旧帖] [求助]读取驱动中的链表蓝屏 0.00雪花

2015-12-5 18:25
1518
我是刚接触驱动开发的菜鸟,先遇到一忒头疼的问题,读取驱动链表时蓝屏!!
typedef struct strNode{
int x;
int y;
LIST_ENTRY Entry;    //Windows自己提供的 LIST_ENTRY结 构双向循环链表
}Node, *pNode;

pNode SetNode(void){
pNode Head, A;   // 定义两个结构体的指针类型变量;

Head =(pNode)ExAllocatePool(PagedPool,sizeof(Node)) ;   //实例化一个Head 的结构体对象并在分页内存中分配空间

//LIST_ENTRY的结构表头必须要用InitializeListHead初始化
InitializeListHead(&Head->Entry);   

Head->x = 0;
Head->y = 0;  //给数据域赋值

//下面开始向链表中插入5个元素
for(int i = 1; i <= 5; i++){

A = (pNode)ExAllocatePool(PagedPool, sizeof(Node));   //实例化节点 A ,在分页内存中分配空间

//给数据域赋值
A->x = i;
A->y = i + 1;

InsertHeadList(&Head->Entry, &A->Entry);  被插入的节点,
        }
return Head;
}

void GetPrint(pNode head){
pNode temp=(pNode)ExAllocatePool(PagedPool, sizeof(Node));
temp = head;
if (temp != NULL){
do{
DbgPrint("节点 %d = %d,Next = %d, prior = %d, x = %d, y = %d \n", temp->x, temp, temp->Entry.Flink, temp->Entry.Blink, temp->x, temp->y);
temp=(pNode)temp->Entry.Blink;   //强制将 "_LIST_ENTRY *" 类型下的成员转换为 "pNode " 指针类型
} while (!(temp == head));
}
return;
}

奇怪的是我把这个句 temp=(pNode)temp->Entry.Blink 改成:temp->Entry.Blink=temp->Entry.Blink->Blink 就不会蓝屏了,但是只能读取第一个节点,0 的,x=0,y=0,郁闷的是基地址还是,负数!!
谁能告诉我是什么原因啊?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一定要把LIST_ENTRY 结构写在第一位,数据域写在它的下面,不然会导致蓝屏!!
无语的了......我那个纠结啊,这有区别吗!!
2015-12-5 20:14
0
游客
登录 | 注册 方可回帖
返回
//