CCB  ContextControlBlock  是存Private信息的,这个FO的特殊信息

FCB  FileControlBlock          是存全局信息的

FO    FileObject                   代表一个文件打开实例

之间关系:

FO  与  CCB  是1:1的

即一个FO有一个CCB根着

FCB 与 CCB 是1:n的 (n >= 1)

即一个FCB可能有n个CCB和它关联.

FO->FsContext2指向CCB

FO->FsContext指向CommFCB

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

FCB
 

文件卷中的对象即磁盘上的对象,只要是打开着的,就在内存中有个“文件控制块”即FCB作为其代表。FCB代表着文件卷的目标对象(不一定是文件),而文件对象FILE_OBJECT结构则代表着这个目标对象的一次打开,或者说代表着这个目标对象与某个进程的一个连接。一个目标对象最多只有一个FCB,如果没有打开就没有FCB,但是却可以有多个文件对象,因为可以被多次打开。

可想而知,文件对象中一定有指针指向目标对象的FCB。DeviceObject指向目标对象所在的设备即磁盘设备。指针FsContext(驱动程序为文件对象维护的状态信息)用来指向代表着目标对象的FCB。对于FAT文件系统而言这是一个VFATFCB数据结构。另一个指针指向FsContext2,就磁盘文件和目录来说,则用来指向一个“上下文控制块”即CCB。

目标对象的每次打开都有个文件对象即FILE_OBJECT结构作为代表,同时又有个CCB。不过有时候CCB不是必要的。数据结构“文件参数块”VPB把抽象意义上的“文件卷”更物理意义上的磁盘联系在一起了。VPB中有两个指针,一个是DeviceObject,他指向代表着文件卷的设备对象,就是相应FSD所创建的设备对象。这决定了文件卷中的信息时如何组织的;另一个指针是RealDevice,它指向代表着具体(逻辑)磁盘的设备对象,这决定了信息是如何存储的。FILE_OBJECT结构中的指针指向一个VPB,这一方面表明目标卷存在于哪个逻辑磁盘上,另一方面表明这个磁盘承载着什么样的文件卷属于哪一种文件系统。

/*
 尽管FsContext所指的FCB、DCB或VCB对象可以由文件系统驱动程序自行定义,
 但是,Windows的缓存管理器需要依赖于这些对象中的一个公共头部才可以工作,
 此公共头部称为//PFSRTL_COMMON_FCB_HEADER,如果文件系统驱动程序要使用缓存管理器提供的
 缓存功能,那么,他必须确保这些对象都以//PFSRTL_COMMON_FCB_HEADER作为头部成员

*/
   PFSRTL_COMMON_FCB_HEADER pFcb;

/*
  FsContext域表示此文件对象所代表的实际对象的数据结构,如果文件对象代表一个磁盘目录,则它指向FCB
  FsContext2域指向CCB结构,代表文件对象的已打开实例。
  CCB:Context Control Block
  FCB针对每个文件而唯一存在,而CCB针对每一次打开文件而存在
  例如,两个应用程序共享访问同一个文件,他们的CCB不同,但它们的CCB中所指向的FCB是相同的,
  而且,CCB中记录了相应的应用程序正在操作该文件的偏移位置。在这种情况下,每个CCB关联不同的
  文件对象(FILE_OBJECT)

*/
   pFcb = (PFSRTL_COMMON_FCB_HEADER)pFileObject->FsContext;

转自:http://blog.csdn.net/redchairman/article/details/7018063

最新文章

  1. 初探Redis+Net在Windows环境下的使用
  2. Python对时间的转换
  3. Android之列表内容显示
  4. Recovery启动流程(2)---UI界面
  5. 布局神器:Flexbox
  6. AngularJS进阶(二)AngularJS路由问题解决
  7. I-think-3
  8. C#网络请求与JSON解析
  9. vue -webpack.dev.config.js模拟后台数据接口
  10. 洛谷 P1359 租用游艇【dp】(经典)
  11. nodejs 学习六 express 三种查询url参数方法
  12. POJ3694 Network - Tarjan + 并查集
  13. 字符编码问题mysql
  14. HTML5学习笔记:跨域
  15. Spring学习(十七)----- Spring自动代理创建者
  16. Openstack(十三)部署管理服务horizon
  17. Linux系统——引导过程与服务控制
  18. 【重点突破】—— 当better-scroll 遇见Vue
  19. jQuery整理笔记八----jQuery的Ajax
  20. maya2012安装失败如何卸载重装

热门文章

  1. C# vb .NET识别读取QR二维码
  2. Java中关于位运算的面试题
  3. vue-quill-editor富文本编辑器 中文翻译组件,编辑与展示
  4. 字符串的sizeof长度及strlen长度
  5. qtcreator VLD内存检测
  6. HTTP协议那些事儿
  7. 十、lambda表达式、内置函数之filter、map、reduce
  8. update的where条件要把索引的字段带上,要不然就全表锁
  9. PacMan 01——地图的搭建
  10. 嵌入式linux开发uboot启动内核的机制(二)