ListEntry 链表图解,及解析 InsertTailList & RemoveHeadList&RemoveEntryList函数
来源:互联网 发布:阿里云阿里巴巴矢量图 编辑:程序博客网 时间:2024/06/05 16:20
一:NPROT_INSERT_TAIL_LIST(&pOpenContext->PendedReads, &pIrp->Tail.Overlay.ListEntry);
#define NPROT_INSERT_TAIL_LIST(_pList, _pEnt)InsertTailList(_pList, _pEnt)
二:pIrpEntry =pOpenContext->PendedReads.Flink
三:pIrp ==CONTAINING_RECORD(pIrpEntry, IRP,Tail.Overlay.ListEntry)
PendedReads是一个LIST_ENTRY结构体链表的表头结点
pIrpEntry是位于IRP结构体中的地址值
Tail.Overlay.ListEntry返回了它对IRP结构体首地址的距离,因为结构体的第一个成员位于低地址,所以首地址低于pIrpEntry
所以用pIrpEntry减去Tail.Overlay.ListEntry返回了它对IRP结构体首地址的距离就得到了IRP的首地址
这个链表串联的是包含的LIST_ENTRYListEntry;的IRP结构体
宏CONTAINING_RECORD的作用是用结构成员中的LIST_ENTRY的地址减去它距离结构体第一个成员的距离得到结构体首地址
IRP 结构
sdf
IRP 结构
dfs
IRP 结构
IRP 结构
第一个成员
<---------
CONTAINING_RECORD作用是返回到这里
ListEntry
<--------->
ListEntry
<--------->
ListEntry
<--------->
ListEntry
<--------->
PendedReads表头 |相当于一个IRP的链表
- ListEntry 链表图解,及解析 InsertTailList & RemoveHeadList&RemoveEntryList函数
- ListEntry 链表图解,及解析 InsertTailList & RemoveHeadList&RemoveEntryList函数
- c++学习例子静态链表ListEntry
- 图解Dex文件结构及解析要点
- RemoveHeadList 宏定义
- Ros Code - ListEntry操作
- ListEntry 遍历宏
- PCB布线规则图解及PCB布线参考因素解析
- 图解JVM内存结构及内存/栈溢出原因解析
- 双向链表的插入及删除图解
- 双向链表的插入及删除图解
- 双向链表的插入及删除图解
- strtok 函数解析 及缺陷
- memset()函数解析及易错点
- 构造函数用法及this关键字的内存图解
- Oracle 分析函数及开窗函数 解析
- 原型链及作用域知识图解
- 双向链表--图解
- Android的数据存储--SharedPreferences
- 0927
- 通过ATL开发COM概述
- 在Mac OS X中配置Apache + PHP + MySQL
- Hibernate多对多映射为第三张表manytomany【xml和注解】实例(十七)
- ListEntry 链表图解,及解析 InsertTailList & RemoveHeadList&RemoveEntryList函数
- 《程序员》 -- 对国内云计算三个现象的思考
- hdu 4619Warm up 2
- [读书笔记]CIO Comprehensive Practice - Chapter1
- OpenFlow基础概念理解(3) OpenFlow架构
- session bean
- Boost学习系列5-字符串处理
- Cited from http://hi.baidu.com/zengzhaonong/blog/item/4b901ee9b5ef343cb90e2d16.html
- 解决iOS报错libc++abi.dylib handler threw exception