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

 

posted @ 2016-04-11 22:25  DebugSkill  阅读(155)  评论(0编辑  收藏  举报