FCB CCB FileObject

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

FCB  FileControlBlock          是存全局信息的数据结构

FO    FileObject                   表明一个文件打开实例.net

 

 

之间关系:指针

 

FO  与  CCB  是1:1的对象

即一个FO有一个CCB根着blog

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

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

 

FO->FsContext2指向CCBit

FO->FsContext指向CommFCBclass



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

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

相关文章
相关标签/搜索