more loader changes and new fixes to the VFAT driver from jean
[reactos.git] / reactos / drivers / fs / vfat / vfat.h
1
2
3
4 struct _BootSector {
5 unsigned char magic0, res0, magic1;
6 unsigned char OEMName[8];
7 unsigned short BytesPerSector;
8 unsigned char SectorsPerCluster;
9 unsigned short ReservedSectors;
10 unsigned char FATCount;
11 unsigned short RootEntries, Sectors;
12 unsigned char Media;
13 unsigned short FATSectors, SectorsPerTrack, Heads;
14 unsigned long HiddenSectors, SectorsHuge;
15 unsigned char Drive, Res1, Sig;
16 unsigned long VolumeID;
17 unsigned char VolumeLabel[11], SysType[8];
18 unsigned char Res2[450];
19 } __attribute__((packed));
20
21 struct _BootSector32 {
22 unsigned char magic0, res0, magic1;
23 unsigned char OEMName[8];
24 unsigned short BytesPerSector;
25 unsigned char SectorsPerCluster;
26 unsigned short ReservedSectors;
27 unsigned char FATCount;
28 unsigned short RootEntries, Sectors;
29 unsigned char Media;
30 unsigned short FATSectors, SectorsPerTrack, Heads;
31 unsigned long HiddenSectors, SectorsHuge;
32 unsigned long FATSectors32;
33 unsigned char x[31];
34 unsigned char VolumeLabel[11], SysType[8];
35 unsigned char Res2[422];
36 } __attribute__((packed));
37
38 typedef struct _BootSector BootSector;
39
40 struct _FATDirEntry {
41 unsigned char Filename[8], Ext[3], Attrib, Res[2];
42 unsigned short CreationTime,CreationDate,AccessDate;
43 unsigned short FirstClusterHigh;// higher
44 unsigned short UpdateTime;//time create/update
45 unsigned short UpdateDate;//date create/update
46 unsigned short FirstCluster;
47 unsigned long FileSize;
48 } __attribute__((packed));
49
50 typedef struct _FATDirEntry FATDirEntry;
51
52 struct _slot
53 {
54 unsigned char id; // sequence number for slot
55 WCHAR name0_4[5]; // first 5 characters in name
56 unsigned char attr; // attribute byte
57 unsigned char reserved; // always 0
58 unsigned char alias_checksum; // checksum for 8.3 alias
59 WCHAR name5_10[6]; // 6 more characters in name
60 unsigned char start[2]; // starting cluster number
61 WCHAR name11_12[2]; // last 2 characters in name
62 } __attribute__((packed));
63
64
65 typedef struct _slot slot;
66
67 #define BLOCKSIZE 512
68
69 // Put the rest in struct.h
70 /*
71 typedef unsigned int uint32;
72
73 typedef struct _SFsdIdentifier {
74 uint32 NodeType;
75 uint32 NodeSize;
76 } SFsdIdentifier, *PtrSFsdIdentifier;
77
78 typedef struct _SFsdNTRequiredFCB {
79 FSRTL_COMMON_FCB_HEADER CommonFCBHeader;
80 SECTION_OBJECT_POINTERS SectionObject;
81 ERESOURCE MainResource;
82 ERESOURCE PagingIoResource;
83 } SFsdNTRequiredFCB, *PtrSFsdNTRequiredFCB;
84
85 typedef struct _SFsdFileControlBlock {
86 SFsdIdentifier NodeIdentifier;
87 SFsdNTRequiredFCB NTRequiredFCB;
88 SFsdDiskDependentFCB DiskDependentFCB;
89 struct _SFsdVolumeControlBlock *PtrVCB;
90 LIST_ENTRY NextFCB;
91 uint32 FCBFlags;
92 LIST_ENTRY NextCCB;
93 SHARE_ACCESS FCBShareAccess;
94 uint32 LazyWriterThreadID;
95 uint32 ReferenceCount;
96 uint32 OpenHandleCount;
97 PtrSFsdObjectName FCBName;
98 LARGE_INTEGER CreationTime;
99 LARGE_INTEGER LastAccessTime;
100 LARGE_INTEGER LastWriteTime;
101 SFsdFileLockAnchorFCB ByteRangeLock;
102 OPLOCK FCBOplock;
103 } SFsdFCB, *PtrSFsdFCB;
104
105 */
106 #define FAT16 (1)
107 #define FAT12 (2)
108 #define FAT32 (3)
109
110 typedef struct
111 {
112 PDEVICE_OBJECT StorageDevice;
113 BootSector *Boot;
114 int rootDirectorySectors, FATStart, rootStart, dataStart;
115 int FATEntriesPerSector, FATUnit;
116 ULONG BytesPerCluster;
117 ULONG FatType;
118 unsigned char* FAT;
119 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
120
121 typedef struct
122 {
123 FATDirEntry entry;
124 WCHAR ObjectName[251];// filename has 250 characters max
125 ULONG StartSector;
126 ULONG StartEntry;//for DirectoryControl
127 } FCB, *PFCB;
128
129
130 #define ENTRIES_PER_SECTOR (BLOCKSIZE / sizeof(FATDirEntry))
131
132
133
134 // functions called by i/o manager :
135 NTSTATUS DriverEntry(PDRIVER_OBJECT _DriverObject,PUNICODE_STRING RegistryPath);
136 NTSTATUS FsdDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
137 NTSTATUS FsdRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
138 NTSTATUS FsdWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
139 NTSTATUS FsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
140 NTSTATUS FsdClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
141 NTSTATUS FsdFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
142 NTSTATUS FsdQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
143
144
145 // internal functions in blockdev.c
146 BOOLEAN VFATReadSectors(IN PDEVICE_OBJECT pDeviceObject,
147 IN ULONG DiskSector,
148 IN ULONG SectorCount,
149 IN UCHAR* Buffer);
150
151 BOOLEAN VFATWriteSectors(IN PDEVICE_OBJECT pDeviceObject,
152 IN ULONG DiskSector,
153 IN ULONG SectorCount,
154 IN UCHAR* Buffer);
155
156 //internal functions in iface.c :
157 NTSTATUS FsdGetStandardInformation(PFCB FCB, PDEVICE_OBJECT DeviceObject,
158 PFILE_STANDARD_INFORMATION StandardInfo);
159 NTSTATUS FindFile(PDEVICE_EXTENSION DeviceExt, PFCB Fcb,
160 PFCB Parent, PWSTR FileToFind,ULONG *StartSector,ULONG *Entry);
161 wchar_t * vfat_wcsncpy(wchar_t * dest, const wchar_t *src,size_t wcount);