1 typedef struct _MYDATA 2 { 3 LIST_ENTRY ListEntry; 4 LONG number; 5 }MYDATA, *PMYDATA; 6 7 void LinkedListTest() 8 { 9 LIST_ENTRY head; 10 MYDATA *pMyData; 11 PLIST_ENTRY pListEntry; 12 InitializeListHead(&head); 13 14 // 创建链表 15 for (int i = 0; i < 10; i++) 16 { 17 // 分配分页内存 18 pMyData = (PMYDATA)ExAllocatePool(PagedPool, sizeof(MYDATA)); 19 pMyData->number = i; 20 InsertTailList(&head, &pMyData->ListEntry); 21 } 22 23 // 遍历链表 24 pMyData = (PMYDATA)head.Flink; 25 while (pMyData != (PMYDATA)&head) 26 { 27 KdPrint(("%d\n", pMyData->number)); 28 pMyData = (PMYDATA)pMyData->ListEntry.Flink; 29 } 30 31 // 释放链表 32 KdPrint(("now removing linked list...")); 33 while (!IsListEmpty(&head)) 34 { 35 pListEntry = RemoveTailList(&head); // 从尾部删除一个节点(如果需要从中间删除,使用RemoveEntryList函数) 36 pMyData = (PMYDATA)pListEntry; 37 KdPrint(("Removed data:%d\n", pMyData->number)); 38 ExFreePool(pListEntry); // 释放删除掉的节点所占用的内存 39 } 40 }
相关文章: