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

相關文章
相關標籤/搜索