[fastfat_new]
[reactos.git] / reactos / drivers / filesystems / fastfat_new / fatstruc.h
index d2b7412..6382f44 100644 (file)
@@ -35,6 +35,10 @@ typedef struct _FAT_GLOBAL_DATA
     BOOLEAN Win31FileSystem;
     /* Jan 1, 1980 System Time */
     LARGE_INTEGER DefaultFileTime;
+
+    /* FullFAT integration */
+    FF_IOMAN *Ioman;
+    FF_ERROR FF_Error;
 } FAT_GLOBAL_DATA;
 
 typedef struct _FAT_PAGE_CONTEXT
@@ -170,10 +174,14 @@ typedef struct _VCB
     ULONG RootDirentSectors;
     LONGLONG BeyondLastClusterInFat;
     FAT_METHODS Methods;
-    /*  Root Directory Fcb: */
-    struct _FCB *RootFcb;
+
+    /*  Root Directory Control block */
+    struct _FCB *RootDcb;
 
     ULONG MediaChangeCount;
+
+    /* FullFAT integration */
+    FF_IOMAN *Ioman;
 } VCB, *PVCB;
 
 #define VcbToVolumeDeviceObject(xVcb) \
@@ -213,11 +221,23 @@ enum _FCB_NAME_TYPE {
 } FCB_NAME_TYPE;
 
 typedef struct _FCB_NAME_LINK {
+    struct _FCB *Fcb;
     RTL_SPLAY_LINKS Links;
-    UNICODE_STRING String;
-    UCHAR Type;
+    union
+    {
+        OEM_STRING Ansi;
+        UNICODE_STRING String;
+    } Name;
+    BOOLEAN IsDosName;
 } FCB_NAME_LINK, *PFCB_NAME_LINK;
 
+typedef enum _FCB_CONDITION
+{
+    FcbGood,
+    FcbBad,
+    FcbNeedsToBeVerified
+} FCB_CONDITION;
+
 typedef struct _FCB
 {
     FSRTL_ADVANCED_FCB_HEADER Header;
@@ -227,36 +247,50 @@ typedef struct _FCB
     * FCB into paged and non paged parts
     * (as it is done in MS implementation
     */
-    FAST_MUTEX HeaderMutex;
+    FAST_MUTEX HeaderMutex; // nonpaged!
     SECTION_OBJECT_POINTERS SectionObjectPointers;
-    ERESOURCE Resource;
-    ERESOURCE PagingIoResource;
+    ERESOURCE Resource; // nonpaged!
+    ERESOURCE PagingIoResource; // nonpaged!
 
     FILE_LOCK Lock;
+    /* First cluster in the fat allocation chain */
+    ULONG FirstClusterOfFile;
+    /* A list of all FCBs of that DCB */
+    LIST_ENTRY ParentDcbLinks;
     /* Reference to the Parent Dcb*/
     struct _FCB *ParentFcb;
     /* Pointer to a Vcb */
     PVCB Vcb;
+    /* Fcb state */
+    ULONG State;
+    /* Fcb condition */
+    FCB_CONDITION Condition;
     /* Mcb mapping Vbo->Lbo */
     LARGE_MCB Mcb;
     ULONG FirstCluster;
     /* Links into FCB Trie */
-    FCB_NAME_LINK FileName[0x2];
+    FCB_NAME_LINK FileName;
     /* Buffer for the short name */
     WCHAR ShortNameBuffer[0xc];
     /* Full file name */
     UNICODE_STRING FullFileName;
+    /* A copy of fat attribute byte */
+    UCHAR DirentFatFlags;
     /* File basic info */
     FILE_BASIC_INFORMATION BasicInfo;
     union
     {
         struct
         {
+            /* A list of all FCBs/DCBs opened under this DCB */
+            LIST_ENTRY ParentDcbList;
             /* Directory data stream (just handy to have it). */
             PFILE_OBJECT StreamFileObject;
             /* Bitmap to search for free dirents. */
-            /* RTL_BITMAP Bitmap; */
-            PRTL_SPLAY_LINKS SplayLinks;
+            RTL_BITMAP FreeBitmap;
+            /* Names */
+            PRTL_SPLAY_LINKS SplayLinksAnsi;
+            PRTL_SPLAY_LINKS SplayLinksUnicode;
         } Dcb;
     };
 } FCB, *PFCB;