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

FCB CCB FileObject的更多相关文章

  1. [14]Windows内核情景分析 --- 文件系统

    文件系统 一台机器上可以安装很多物理介质来存放资料(如磁盘.光盘.软盘.U盘等).各种物理介质千差万别,都配备有各自的驱动程序,为了统一地访问这些物理介质,windows设计了文件系统机制.应用程序要 ...

  2. [13]Windows 内核情景分析 --- 网络通信

    典型的基于tcpip协议套接字方式的网络通信模块层次: 应用程序 socket api WS2_32.dll socket irp Afd.sys tdi irp Tcpip.sys 回调函数接口 各 ...

  3. openssl evp 对称加密(AES_ecb,ccb)

    openssl evp 对称加密(AES_ecb,ccb) evp.h 封装了openssl常用密码学工具,以下主要说对称加密的接口 1. 如下使用 aes_256_ecb 模式的加密解密测试代码 u ...

  4. c语言_文件操作_FILE结构体解释_涉及对操作系统文件FCB操作的解释_

    1. 文件和流的关系 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件 ...

  5. cocos2d-x绑定ccb文件

    首先,ccb文件是如何生成的,我就不多说了,大家可以搜下cocosbuilder,就能找的相关的教程,而通过cocosbuilder,我们可以省去了很多设计的麻烦,比如设计一个精灵的位置啥的,而通过c ...

  6. 通过ccb(CocosBuilder)文件生成cocos2dx代码

    在C++下使用ccb.绑定调用,成员变量.让人头疼又easy犯错. 自己用pythong写了个小程序,通过ccb文件直接生成C++代码 python我用的不多.又是随性所做.代码质量就非常差.大家多多 ...

  7. SpriteBuilder中使用Node类型的ccb动画节点删除时崩溃的问题

    因为节点需要呈现动画效果,虽然只有两个不同帧. 在SpriteBuilder中新建Bullet.ccb文件,类型为node. 添加如上2张图片,并制作动画效果帧. 在游戏中子弹遇到障碍物会被删除,时机 ...

  8. SpriteBuilder复杂CCB在App场景加载时报错排查

    Player.CCB由body和arm两部分组成,它们都开启物理使能. 在GameScene.ccb中新建一个物理对象,将Player.ccb拖入该对象.此时编译运行App均正常. 然后继续添加其他物 ...

  9. 为CCB中的Sprite子类化CCSprite的一个问题

    这时一个特定的错误发生在运行app或者loading场景的时候: reason: '[<NameOfClass 0x7a043520> setValue:forUndefinedKey:] ...

随机推荐

  1. Python 学习 第14篇:数据类型(元组和集合)

    元组和集合是Python中的基本类型 一,元组 元组(tuple)由小括号.逗号和数据对象构成的集合,各个项通过逗号隔开,元组的特点是: 元组项可以是任何数据类型,也可以嵌套 元组是一个位置有序的对象 ...

  2. 深入V8引擎-AST(5)

    懒得发首页了,有时候因为贴的代码太多会被下,而且这东西本来也只是对自己学习的记录,阅读体验极差,所以就本地自娱自乐的写着吧! 由于是解析字符串,所以在开始之前介绍一下词法结构体中关于管理字符串类的属性 ...

  3. pack URI

    WPF使用pack URI语法寻找资源. URI负责搜索如下位置的资源: 当前程序集 引用的程序集 相对于程序集的某个位置 应用程序的源站点 pack URI的格式:pack://机构/路径 机构指定 ...

  4. C#通过字符串分割字符串Split

    string[] strArr = str.Split(new[] {"****==="},StringSplitOptions.None); 更多内容关注公众号 洛水梅家

  5. 一文搞定十大经典排序算法(Java实现)

    本文总结十大经典排序算法及变形,并提供Java实现. 参考文章: 十大经典排序算法总结(Java语言实现) 快速排序算法—左右指针法,挖坑法,前后指针法,递归和非递归 快速排序及优化(三路划分等) 一 ...

  6. vue工作原理分析

    初始化 在 new Vue() 时会调⽤用_init()进⾏行行初始化,会初始化各种实例例⽅方法.全局⽅方法.执⾏行行⼀一些⽣生命周期. 初始化props. data等状态.其中最重要的是data的「 ...

  7. vue.js 打包时出现空白页和路径错误

    vue-cli输入命令:npm  run  build 即可打包vue.js的项目 打包出来后项目中就会多了一个文件夹dist,下图为我们打包过后的项目 我们直接运行打包后的文件夹中的index.ht ...

  8. Vue2.0 新手入门 — 从环境搭建到发布

    什么是 Vue Vue 是一个前端框架,特点是数据绑定 比如你改变一个输入框 Input 标签的值,会自动同步更新到页面上其他绑定该输入框的组件的值 组件化 页面上小到一个按钮都可以是一个单独的文件. ...

  9. office viso 2007根据现有数据库建立数据库模型图

    当数据库表很多的时候,表之间的关系就变得很复杂.光凭记忆很难记住,尤其是数据库键值没有外键约束时. 所以有个数据库模型图各个表之间的关系就显而易见了. 打开 office viso 2007 文件&g ...

  10. MySQL5.7 安装和配置环境变量

    安装 1.下载安装包 官网地址:https://dev.mysql.com/downloads/mysql/ 2.选择 Custom,自定义 3.根据自己系统选择 x64还是x86,然后点击第一个箭头 ...