找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4970|回复: 3

LIST_ENTRY 遍历问题

[复制链接]

3

主题

25

回帖

0

精华

初来乍到

积分
2047
发表于 2016-10-3 03:02:17 | 显示全部楼层 |阅读模式
为什么我在网上看到和《Windows 内核安全与驱动开发》遍历LIST_ENTRY 的方式是

  1. //摘录书中代码
  2. BOOLEAN cfIsFileCrypting(PFILE_OBJECT file)
  3. {
  4.     PLIST_ENTRY p;
  5.     PCF_NODE node;
  6.    for(p = s_cf_list.Flink; p != &s_cf_list; p = p->Flink)
  7.     {
  8.             node = (PCF_NODE)p;
  9.         if(node->fcb == file->FsContext)
  10.         {
  11.             //KdPrint(("cfIsFileCrypting: file %wZ is crypting. fcb = %x \r\n",&file->FileName,file->FsContext));
  12.             return TRUE;
  13.         }
  14.     }
  15.     return FALSE;
  16. }
复制代码


但是我自己实现的

  1.     int inedx = 0;
  2.     for (PLIST_ENTRY plist = pDevExt->ProcessHead.Flink;
  3.         plist != &pDevExt->ProcessHead;
  4.         plist = plist->Flink, inedx++)
  5.     {
  6.         KdBreakPoint();

  7.         if (inedx == pDevExt->processInedx && inedx != pDevExt->processCount)
  8.         {
  9.             pDevExt->processInedx++;

  10.             *data = CONTAINING_RECORD(plist, tagProcess, listEntry);
  11.             return STATUS_SUCCESS;
  12.         }
  13.     }
复制代码


只循环第一次,链表指针就飞掉了。。。 但是用那种最土的,拿一个丢一个却又能正常拿到。。。

这样子又能正常遍历完毕。。。

  1. PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
  2.    
  3.     if (IsListEmpty(&pDevExt->ProcessHead))
  4.     {
  5.         *data = NULL;
  6.         return STATUS_SUCCESS;
  7.     }

  8.     PLIST_ENTRY plist = RemoveTailList(&pDevExt->ProcessHead);

  9.     *data = CONTAINING_RECORD(plist, tagProcess, listEntry);

  10.     return STATUS_SUCCESS;
复制代码


我就是不想获取一个就释放一个。但是用for。我这里每次循环拿第二项的时候就指针错乱了。。 有人遇见过这种情况吗???

环境 7600 XP Checked 版本

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2016-10-7 06:58:38 | 显示全部楼层
帮顶........

驱动相关问题请 @Tesla.Angela
我就是嗷嗷叫的老马了......

28

主题

116

回帖

0

精华

铜牌会员

积分
273
发表于 2016-10-8 10:06:04 | 显示全部楼层
难道你要找的是这个?
http://www.m5home.com/bbs/thread-8450-1-1.html

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2016-10-30 01:25:01 | 显示全部楼层
遍历链表参考我的这个帖子(http://www.m5home.com/bbs/thread-8450-1-1.html)即可。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表