6 #define CDFS_BASIC_SECTOR 2048
7 #define CDFS_PRIMARY_DESCRIPTOR_LOCATION 16
8 #define BLOCKSIZE CDFS_BASIC_SECTOR
9 #define CDFS_MAX_NAME_LEN 256
12 /* Volume descriptor types (VdType) */
13 #define BOOT_VOLUME_DESCRIPTOR_TYPE 0
14 #define PRIMARY_VOLUME_DESCRIPTOR_TYPE 1
15 #define SUPPLEMENTARY_VOLUME_DESCRIPTOR_TYPE 2
16 #define VOLUME_PARTITION_DESCRIPTOR_TYPE 3
17 #define VOLUME_DESCRIPTOR_SET_TERMINATOR 255
21 UCHAR RecordLength; // 1
22 UCHAR ExtAttrRecordLength; // 2
23 ULONG ExtentLocationL; // 3-6
24 ULONG ExtentLocationM; // 7-10
25 ULONG DataLengthL; // 11-14
26 ULONG DataLengthM; // 15-18
34 UCHAR FileFlags; // 26
35 UCHAR FileUnitSize; // 27
36 UCHAR InterleaveGapSize; // 28
37 ULONG VolumeSequenceNumber; // 29-32
38 UCHAR FileIdLength; // 33
39 UCHAR FileId[1]; // 34
40 } __attribute__((packed));
42 typedef struct _DIR_RECORD DIR_RECORD, *PDIR_RECORD;
47 /* Volume Descriptor header*/
51 UCHAR StandardId[5]; // 2-6
53 } __attribute__((packed));
55 typedef struct _VD_HEADER VD_HEADER, *PVD_HEADER;
59 /* Primary Volume Descriptor */
63 UCHAR StandardId[5]; // 2-6
66 UCHAR SystemId[32]; // 9-40
67 UCHAR VolumeId[32]; // 41-72
68 UCHAR unused1[8]; // 73-80
69 ULONG VolumeSpaceSizeL; // 81-84
70 ULONG VolumeSpaceSizeM; // 85-88
71 UCHAR unused2[32]; // 89-120
72 ULONG VolumeSetSize; // 121-124
73 ULONG VolumeSequenceNumber; // 125-128
74 ULONG LogicalBlockSize; // 129-132
75 ULONG PathTableSizeL; // 133-136
76 ULONG PathTableSizeM; // 137-140
77 ULONG LPathTablePos; // 141-144
78 ULONG LOptPathTablePos; // 145-148
79 ULONG MPathTablePos; // 149-152
80 ULONG MOptPathTablePos; // 153-156
81 DIR_RECORD RootDirRecord; // 157-190
82 UCHAR VolumeSetIdentifier[128]; // 191-318
83 UCHAR PublisherIdentifier[128]; // 319-446
87 } __attribute__((packed));
89 typedef struct _PVD PVD, *PPVD;
92 /* Supplementary Volume Descriptor */
96 UCHAR StandardId[5]; // 2-6
98 UCHAR VolumeFlags; // 8
99 UCHAR SystemId[32]; // 9-40
100 UCHAR VolumeId[32]; // 41-72
101 UCHAR unused1[8]; // 73-80
102 ULONG VolumeSpaceSizeL; // 81-84
103 ULONG VolumeSpaceSizeM; // 85-88
104 UCHAR EscapeSequences[32]; // 89-120
105 ULONG VolumeSetSize; // 121-124
106 ULONG VolumeSequenceNumber; // 125-128
107 ULONG LogicalBlockSize; // 129-132
108 ULONG PathTableSizeL; // 133-136
109 ULONG PathTableSizeM; // 137-140
110 ULONG LPathTablePos; // 141-144
111 ULONG LOptPathTablePos; // 145-148
112 ULONG MPathTablePos; // 149-152
113 ULONG MOptPathTablePos; // 153-156
114 DIR_RECORD RootDirRecord; // 157-190
115 UCHAR VolumeSetIdentifier[128]; // 191-318
116 UCHAR PublisherIdentifier[128]; // 319-446
119 } __attribute__((packed));
121 typedef struct _SVD SVD, *PSVD;
129 typedef struct _CDINFO
132 ULONG VolumeSpaceSize;
136 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH];
137 ULONG VolumeLabelLength;
144 ERESOURCE DirResource;
145 // ERESOURCE FatResource;
147 KSPIN_LOCK FcbListLock;
148 LIST_ENTRY FcbListHead;
151 PDEVICE_OBJECT StorageDevice;
152 PFILE_OBJECT StreamFileObject;
157 } DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
160 #define FCB_CACHE_INITIALIZED 0x0001
161 #define FCB_IS_VOLUME_STREAM 0x0002
162 #define FCB_IS_VOLUME 0x0004
166 REACTOS_COMMON_FCB_HEADER RFCB;
167 SECTION_OBJECT_POINTERS SectionObjectPointers;
169 PFILE_OBJECT FileObject;
170 PDEVICE_EXTENSION DevExt;
172 WCHAR *ObjectName; /* point on filename (250 chars max) in PathName */
173 WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
175 USHORT ShortNameLength;
177 // ERESOURCE PagingIoResource;
178 ERESOURCE MainResource;
180 LIST_ENTRY FcbListEntry;
181 struct _FCB* ParentFcb;
198 PFILE_OBJECT PtrFileObject;
199 LARGE_INTEGER CurrentByteOffset;
200 /* for DirectoryControl */
203 /* for DirectoryControl */
204 PWCHAR DirectorySearchPattern;
209 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
211 #define TAG_CCB TAG('I', 'C', 'C', 'B')
217 PDRIVER_OBJECT DriverObject;
218 PDEVICE_OBJECT DeviceObject;
220 } CDFS_GLOBAL_DATA, *PCDFS_GLOBAL_DATA;
222 extern PCDFS_GLOBAL_DATA CdfsGlobalData;
226 CdfsReadSectors(IN PDEVICE_OBJECT DeviceObject,
228 IN ULONG SectorCount,
229 IN OUT PUCHAR Buffer);
231 int CdfsStrcmpi( wchar_t *str1, wchar_t *str2 );
232 void CdfsWstrcpy( wchar_t *str1, wchar_t *str2, int max );
237 CdfsCleanup(PDEVICE_OBJECT DeviceObject,
243 CdfsClose(PDEVICE_OBJECT DeviceObject,
247 CdfsCloseFile(PDEVICE_EXTENSION DeviceExt,
248 PFILE_OBJECT FileObject);
253 CdfsReadSectors(IN PDEVICE_OBJECT DeviceObject,
255 IN ULONG SectorCount,
256 IN OUT PUCHAR Buffer);
259 CdfsReadRawSectors(IN PDEVICE_OBJECT DeviceObject,
261 IN ULONG SectorCount,
262 IN OUT PUCHAR Buffer);
265 CdfsDeviceIoControl (IN PDEVICE_OBJECT DeviceObject,
267 IN PVOID InputBuffer,
268 IN ULONG InputBufferSize,
269 IN OUT PVOID OutputBuffer,
270 IN OUT PULONG pOutputBufferSize);
275 CdfsCreate(PDEVICE_OBJECT DeviceObject,
282 CdfsDirectoryControl(PDEVICE_OBJECT DeviceObject,
289 CdfsCreateFCB(PWCHAR FileName);
292 CdfsDestroyFCB(PFCB Fcb);
295 CdfsFCBIsDirectory(PFCB Fcb);
298 CdfsFCBIsRoot(PFCB Fcb);
301 CdfsGrabFCB(PDEVICE_EXTENSION Vcb,
305 CdfsReleaseFCB(PDEVICE_EXTENSION Vcb,
309 CdfsAddFCBToTable(PDEVICE_EXTENSION Vcb,
313 CdfsGrabFCBFromTable(PDEVICE_EXTENSION Vcb,
317 CdfsFCBInitializeCache(PVCB Vcb,
321 CdfsMakeRootFCB(PDEVICE_EXTENSION Vcb);
324 CdfsOpenRootFCB(PDEVICE_EXTENSION Vcb);
329 CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
331 PFILE_OBJECT FileObject);
337 CdfsGetFCBForFile(PDEVICE_EXTENSION Vcb,
340 const PWSTR pFileName);
346 CdfsQueryInformation(PDEVICE_OBJECT DeviceObject,
350 CdfsSetInformation(PDEVICE_OBJECT DeviceObject,
356 CdfsFileSystemControl(PDEVICE_OBJECT DeviceObject,
362 wstrcmpjoki(PWSTR s1, PWSTR s2);
365 CdfsSwapString(PWCHAR Out,
370 CdfsDateTimeToFileTime(PFCB Fcb,
374 CdfsFileFlagsToAttributes(PFCB Fcb,
375 PULONG FileAttributes);
380 CdfsRead(PDEVICE_OBJECT DeviceObject,
384 CdfsWrite(PDEVICE_OBJECT DeviceObject,
391 CdfsQueryVolumeInformation(PDEVICE_OBJECT DeviceObject,
395 CdfsSetVolumeInformation(PDEVICE_OBJECT DeviceObject,