在看《windows驱动开发技术详解》中,关于第五章链表部分,做书上实验时本来以为写入链表后,要先读取然后才能删除链表,仔细看看作者的例子后发现,原来是先要从链表中删除(也就是取出),然后才能对取出的数据进行读取。
//从链表中取出,并显示
KdPrint(("Begin remove from link list\n"));
while(!IsListEmpty(&linkListHead))
{
PLIST_ENTRY pEntry = RemoveTailList(&linkListHead);
pData = CONTAINING_RECORD(pEntry,
MYDATASTRUCT,
ListEntry);
KdPrint(("%d\n",pData->number));
ExFreePool(pData);
}
自己写了一个读写链表的方法,在楚狂人驱动基础上有。
//直接冲链表中读取,不删除链表元素
PLIST_ENTRY pList = &linklisthead;
pList = pList->Blink;
while ((&linklisthead)!=pList)
{
pData = CONTAINING_RECORD(pList, MYDATASTRUCT, ListEntry);
KdPrint(("%d\n",pData->number));
pList = pList->Blink;
}
注意:链表头没有数据