#define FAT_NTC_FCB (CSHORT) 'CF'
#define FAT_NTC_DCB (CSHORT) 'DF'
#define FAT_NTC_ROOT_DCB (CSHORT) 'RFD'
+#define FAT_NTC_CCB (CSHORT) 'BCC'
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
struct _FCB *RootDcb;
ULONG MediaChangeCount;
+
+ /* FullFAT integration */
+ FF_IOMAN *Ioman;
} VCB, *PVCB;
#define VcbToVolumeDeviceObject(xVcb) \
} 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;
* 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;
+ /* Long name with exact case */
+ UNICODE_STRING ExactCaseLongName;
+ /* A copy of fat attribute byte */
+ UCHAR DirentFatFlags;
/* File basic info */
FILE_BASIC_INFORMATION BasicInfo;
+ /* FullFAT file handle */
+ FF_FILE *FatHandle;
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;
typedef struct _CCB
{
+ CSHORT NodeTypeCode;
+ CSHORT NodeByteSize;
+
LARGE_INTEGER CurrentByteOffset;
ULONG Entry;
UNICODE_STRING SearchPattern;