文件控制块主要用来表示一个ReactOS打开文件的对象。下面就来仔细地分析文件控制块的结构,如下:
#001 typedef struct _VFATFCB
#002 {
#003 /* FCB header required by ROS/NT */
#004 FSRTL_COMMON_FCB_HEADER RFCB;
指向每个文件的数据段指针。
#005 SECTION_OBJECT_POINTERS SectionObjectPointers;
#006 ERESOURCE MainResource;
#007 ERESOURCE PagingIoResource;
#008 /* end FCB header required by ROS/NT */
#009
这个目录或文件的目录入口指针。
#010 /* directory entry for this file or directory */
#011 DIR_ENTRY entry;
#012
指向属性的入口。
#013 /* Pointer to attributes in entry */
#014 PUCHAR Attributes;
#015
#016 /* long file name,points into PathNameBuffer */
#017 UNICODE_STRING LongNameU;
#018
#019 /* short file name */
#020 UNICODE_STRING ShortNameU;
#021
保存目录的名称。
#022 /* directory name,points into PathNameBuffer */
#023 UNICODE_STRING DirNameU;
#024
#025 /* path + long file name 260 max*/
#026 UNICODE_STRING PathNameU;
#027
保存路径名称。
#028 /* buffer for PathNameU */
#029 PWCHAR PathNameBuffer;
#030
保存短名称。
#031 /* buffer for ShortNameU */
#032 WCHAR ShortNameBuffer[13];
#033
文件控制块的引用计数。
#034 /* */
#035 LONG RefCount;
#036
保存这个分卷有多少个文件控制块。
#037 /* List of FCB's for this volume */
#038 LIST_ENTRY FcbListEntry;
#039
指向父文件控制块的指针。
#040 /* pointer to the parent fcb */
#041 struct _VFATFCB* parentFcb;
#042
控制块的标志保存。
#043 /* Flags for the fcb */
#044 ULONG Flags;
#045
#046 /* pointer to the file object which has initialized the fcb */
#047 PFILE_OBJECT FileObject;
#048
#049 /* Directory index for the short name entry */
#050 ULONG dirIndex;
#051
#052 /* Directory index where the long name starts */
#053 ULONG startIndex;
#054
共享访问文件对象标志。
#055 /* Share access for the file object */
#056 SHARE_ACCESS FCBShareAccess;
#057
#058 /* Incremented on IRP_MJ_CREATE,decremented on IRP_MJ_CLEANUP */
#059 ULONG OpenHandleCount;
#060
#061 /* Entry into the hash table for the path + long name */
#062 HASHENTRY Hash;
#063
#064 /* Entry into the hash table for the path + short name */
#065 HASHENTRY ShortHash;
#066
文件锁住范围。
#067 /* List of byte-range locks for this file */
#068 FILE_LOCK FileLock;
#069
保存最后读写的簇和位置。
#070 /*
#071 * Optimalization: caching of last read/write cluster+offset pair. Can't
#072 * be in VFATCCB because it must be reset everytime the allocated clusters
#073 * change.
#074 */
#075 FAST_MUTEX LastMutex;
#076 ULONG LastCluster;
#077 ULONG LastOffset;
#078} VFATFCB,*PVFATFCB;
原文链接:https://www.f2er.com/react/308390.html