我是刚接触驱动开发的菜鸟,先遇到一忒头疼的问题,读取驱动链表时蓝屏!!
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,郁闷的是基地址还是,负数!!
谁能告诉我是什么原因啊?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!