4 typedef struct _FAT_SCAN_CONTEXT
*PFAT_SCAN_CONTEXT
;
5 typedef struct _FAT_IO_CONTEXT
*PFAT_IO_CONTEXT
;
8 typedef struct _FAT_GLOBAL_DATA
11 PDRIVER_OBJECT DriverObject
;
12 PDEVICE_OBJECT DiskDeviceObject
;
13 LIST_ENTRY VcbListHead
;
14 NPAGED_LOOKASIDE_LIST NonPagedFcbList
;
15 NPAGED_LOOKASIDE_LIST ResourceList
;
16 NPAGED_LOOKASIDE_LIST IrpContextList
;
17 FAST_IO_DISPATCH FastIoDispatch
;
18 CACHE_MANAGER_CALLBACKS CacheMgrCallbacks
;
19 CACHE_MANAGER_CALLBACKS CacheMgrNoopCallbacks
;
20 BOOLEAN Win31FileSystem
;
21 /* Jan 1, 1980 System Time */
22 LARGE_INTEGER DefaultFileTime
;
25 #define IRPCONTEXT_CANWAIT 0x0001
26 #define IRPCONTEXT_PENDINGRETURNED 0x0002
27 #define IRPCONTEXT_STACK_IO_CONTEXT 0x0004
28 #define IRPCONTEXT_WRITETHROUGH 0x0008
29 #define IRPCONTEXT_TOPLEVEL 0x0010
31 typedef struct _FAT_IRP_CONTEXT
34 PDEVICE_OBJECT DeviceObject
;
37 PFILE_OBJECT FileObject
;
41 struct _FAT_IO_CONTEXT
*FatIoContext
;
43 WORK_QUEUE_ITEM WorkQueueItem
;
44 PIO_STACK_LOCATION Stack
;
46 } FAT_IRP_CONTEXT
, *PFAT_IRP_CONTEXT
;
48 typedef struct _FAT_IO_CONTEXT
58 PERESOURCE PagingIoResource
;
59 ERESOURCE_THREAD ResourceThreadId
;
60 ULONG RequestedByteCount
;
61 PFILE_OBJECT FileObject
;
62 BOOLEAN ReadOperation
;
69 typedef ULONG (*PFAT_SCANFAT_FOR_CONTINOUS_RUN_ROUTINE
) (struct _FAT_SCAN_CONTEXT
*, PULONG
, BOOLEAN
);
70 typedef ULONG (*PFAT_SETFAT_CONTINOUS_RUN_ROUTINE
) (PFAT_SCAN_CONTEXT
, ULONG
, ULONG
, BOOLEAN
);
71 typedef ULONG (*PFAT_SCANFAT_FOR_VALUE_RUN_ROUTINE
) (PFAT_SCAN_CONTEXT
, PULONG
, ULONG
, BOOLEAN
);
72 typedef ULONG (*PFAT_SETFAT_VALUE_RUN_ROUTINE
) (PFAT_SCAN_CONTEXT
, ULONG
, ULONG
, ULONG
, BOOLEAN
);
74 typedef struct _FAT_METHODS
{
75 PFAT_SCANFAT_FOR_CONTINOUS_RUN_ROUTINE ScanContinousRun
;
76 PFAT_SETFAT_CONTINOUS_RUN_ROUTINE SetContinousRun
;
77 PFAT_SCANFAT_FOR_VALUE_RUN_ROUTINE ScanValueRun
;
78 PFAT_SETFAT_VALUE_RUN_ROUTINE SetValueRun
;
79 } FAT_METHODS
, *PFAT_METHODS
;
81 #define FAT_NTC_VCB (USHORT)TAG('F', 'V', 0, 0);
83 /* Volume Control Block */
86 FSRTL_ADVANCED_FCB_HEADER Header
;
87 FAST_MUTEX HeaderMutex
;
88 SECTION_OBJECT_POINTERS SectionObjectPointers
;
90 PFILE_OBJECT VolumeFileObject
;
91 PDEVICE_OBJECT TargetDeviceObject
;
94 /* Notifications support */
95 PNOTIFY_SYNC NotifySync
;
96 LIST_ENTRY NotifyList
;
98 /* Volume Characteristics: */
100 BIOS_PARAMETER_BLOCK Bpb
;
101 ULONG BytesPerClusterLog
;
102 ULONG BytesPerCluster
;
109 ULONG RootDirentSectors
;
110 LONGLONG BeyondLastClusterInFat
;
112 /* Root Directory Fcb: */
113 struct _FCB
*RootFcb
;
116 #define VcbToVolumeDeviceObject(xVcb) \
117 CONTAINING_RECORD((xVcb), VOLUME_DEVICE_OBJECT, Vcb))
119 #define VcbToDeviceObject(xVcb) \
120 &(VcbToVolumeDeviceObject(xVcb)->DeviceObject)
123 #define SectorsToBytes(xVcb, xSectrors) \
124 ((xVcb)->Bpb.BytesPerSector * (xSectrors))
126 #define BytesToSectors(xVcb, xBytes) \
127 ((xBytes + (xVcb)->Bpb.BytesPerSector - 1) / (xVcb)->Bpb.BytesPerSector)
129 #define SectorsToClusters(xVcb, xSectors) \
130 ((xSectors + (xVcb)->Bpb.SectorsPerCluster - 1) / (xVcb)->Bpb.SectorsPerCluster)
132 #define VCB_FAT_BITMAP_SIZE 0x10000
133 #define VcbFatBitmapIndex(xCluster) ((xCluster)/VCB_FAT_BITMAP_SIZE)
135 /* Volume Device Object */
136 typedef struct _VOLUME_DEVICE_OBJECT
138 DEVICE_OBJECT DeviceObject
;
140 FSRTL_COMMON_FCB_HEADER VolumeHeader
;
141 VCB Vcb
; /* Must be the last entry! */
143 } VOLUME_DEVICE_OBJECT
, *PVOLUME_DEVICE_OBJECT
;
145 // Short name always exists in FAT
147 enum _FCB_NAME_TYPE
{
152 typedef struct _FCB_NAME_LINK
{
153 RTL_SPLAY_LINKS Links
;
154 UNICODE_STRING String
;
156 } FCB_NAME_LINK
, *PFCB_NAME_LINK
;
158 #define FAT_NTC_FCB (USHORT) 'CF'
159 #define FAT_NTC_DCB (USHORT) 'DF'
163 FSRTL_ADVANCED_FCB_HEADER Header
;
165 * Later we might want to move the next four fields
166 * into a separate structureif we decide to split
167 * FCB into paged and non paged parts
168 * (as it is done in MS implementation
170 FAST_MUTEX HeaderMutex
;
171 SECTION_OBJECT_POINTERS SectionObjectPointers
;
173 ERESOURCE PagingIoResource
;
176 /* Reference to the Parent Dcb*/
177 struct _FCB
*ParentFcb
;
178 /* Pointer to a Vcb */
180 /* Mcb mapping Vbo->Lbo */
183 /* Links into FCB Trie */
184 FCB_NAME_LINK FileName
[0x2];
185 /* Buffer for the short name */
186 WCHAR ShortNameBuffer
[0xc];
191 /* Bitmap to search for free dirents. */
192 /* RTL_BITMAP Bitmap; */
193 PRTL_SPLAY_LINKS SplayLinks
;
200 LARGE_INTEGER CurrentByteOffset
;
202 UNICODE_STRING SearchPattern
;
205 extern FAT_GLOBAL_DATA FatGlobalData
;