YJX_Driver_036_在驱动中使用链表sys部分
1、
在驱动中使用链表sys部分
A、链表结构
B、链表的初始化
C、在链表中插入数据(结点)
D、链表数据的删除
E、链表的遍历
【70】这里讲的链表,同样是 上节课讲的那种双向链表
【90】以 第35课 的代码为例来讲解。第35课里面没有 驱动部分,先复制linktype.h,复制 第34课 的驱动部分的代码,把头文件 添加进去
【300】编译
【340】new 【520】修改
【710】printf ==>【745】DbgPrint 这个只要一个(),KdPrint需要两个()
【820】sys放到虚拟机中测试 【860】打开WinDBG
【1290】DDK提供的链表结构
【1370】linktype.h --> 复制 --> linktype_sys.h,加入到sys项目中
【1531】
“
typedef struct _DATA_LINK
{
//struct _DATA_LINK *L;
//struct _DATA_LINK *R;
LIST_ENTRY Entry;
int data; /*数据域*/
int data2;
} DATA_LINK, *PDATA_LINK;
”
【1570】LIST_ENTRY 是一个宏(winnt.h中)
【1718】初始化链表
InitializeListHead(&(head->Entry));
【2080】类似之前的初始化写法 是这样写的
【2121】链表插入数据
【2210】在头部插入结点
InsertHeadList(&(head->Entry), &(pData->Entry)); // ZC: 头部插入 pData
【2425】遍历
pnode = (PDATA_LINK)pnode->Entry.Blink; // 需要强转
【2710】ZC: 这里 是一个警告,但是 还有一个 error,记得 前面有设置 将警告当做error来对待,于是将这个warnning处理掉之后,error也没有了
【2750】驱动放入 虚拟机 测试
【2855】sys中,添加 打印信息
【2955】再次 驱动放入虚拟机测试
【3060】没有看到 刚刚添加进去的 打印信息 被打印出来...
【3118】重新 编译(一直是用的vs2003编译) 再测试
【3300】用 DebugView 来看,看到信息了
【3370】∵前面的信息尾部没有 打印"\n",∴ 这条信息接在了上一条信息的最后面,比较难以发现它的存在
2、
//链表指针结构
LIST_ENTRY
//初始化链表
InitializeListHead
//判断链表是否为空
IsListEmpty
//在头部插入结点
InsertHeadList
//在尾部插入结点
InsertTailList
//从链表中删除
//头部删除
RemoveHeadList
//尾部删除
RemoveTailList