Windows驱动开发小练习-内存分配与链表操作
2013-11-19 01:09
621 查看
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 }
相关文章推荐
- Windows驱动开发小练习-内存分配与链表操作
- Windows驱动开发WDM (3)- 设备内存读写方式
- Windows驱动开发基础(八)内存管理
- Windows 下主程序与动态库(*.dll)释放对方分配的内存操作要点
- Linux 驱动开发中常用的内存分配方法浅析
- Windows驱动开发小练习-Lookaside测试程序
- 驱动开发(4)内核中的内存分配和错误码
- 嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法)
- Windows 下主程序与动态库(*.dll)释放对方分配的内存操作要点
- windows驱动开发学习笔记一双向链表LIST_ENTRY
- 【驱动开发】003 内存、链表、锁
- 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)
- Windows驱动开发之注册表操作
- 动态内存分配以及链表的基本操作
- win 驱动开发 内存链表图解
- Windows驱动开发(3) - 内核模式下的字符串操作
- Windows驱动开发之文件操作
- 21、Windows内核函数(2)-Windows驱动开发详解笔记,文件操作
- Windows驱动开发(5) - 内核模式下的注册表操作
- Linux 字符设备驱动开发--内存读写操作