7 #define CACHEPAGESIZE(pDeviceExt) \
8 ((pDeviceExt)->NtfsInfo.BytesPerCluster > PAGE_SIZE ? \
9 (pDeviceExt)->NtfsInfo.BytesPerCluster : PAGE_SIZE)
11 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
13 #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
16 typedef struct _BOOT_SECTOR
18 UCHAR Magic[3]; // 0x00
19 UCHAR OemName[8]; // 0x03
20 USHORT BytesPerSector; // 0x0B
21 UCHAR SectorsPerCluster; // 0x0D
22 UCHAR Unused0[7]; // 0x0E
23 UCHAR MediaId; // 0x15
24 UCHAR Unused1[2]; // 0x16
25 USHORT SectorsPerTrack;
28 UCHAR Unknown0[4]; /* always 80 00 80 00 */
29 ULONGLONG SectorCount;
30 ULONGLONG MftLocation;
31 ULONGLONG MftMirrLocation;
32 ULONG ClustersPerMftRecord;
33 ULONG ClustersPerIndexRecord;
34 ULONGLONG SerialNumber; // 0x48
35 UCHAR BootCode[432]; // 0x50
36 } __attribute__((packed)) BOOT_SECTOR, *PBOOT_SECTOR;
38 //typedef struct _BootSector BootSector;
44 typedef struct _NTFS_INFO
47 ULONG SectorsPerCluster;
48 ULONG BytesPerCluster;
49 ULONGLONG SectorCount;
50 ULARGE_INTEGER MftStart;
51 ULARGE_INTEGER MftMirrStart;
52 ULONGLONG SerialNumber;
54 } NTFS_INFO, *PNTFS_INFO;
59 ERESOURCE DirResource;
60 // ERESOURCE FatResource;
62 KSPIN_LOCK FcbListLock;
63 LIST_ENTRY FcbListHead;
66 PDEVICE_OBJECT StorageDevice;
67 PFILE_OBJECT StreamFileObject;
72 } DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
75 #define FCB_CACHE_INITIALIZED 0x0001
76 #define FCB_IS_VOLUME_STREAM 0x0002
77 #define FCB_IS_VOLUME 0x0004
81 REACTOS_COMMON_FCB_HEADER RFCB;
82 SECTION_OBJECT_POINTERS SectionObjectPointers;
84 PFILE_OBJECT FileObject;
85 PDEVICE_EXTENSION DevExt;
87 WCHAR *ObjectName; /* point on filename (250 chars max) in PathName */
88 WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
90 ERESOURCE PagingIoResource;
91 ERESOURCE MainResource;
93 LIST_ENTRY FcbListEntry;
94 struct _FCB* ParentFcb;
110 PFILE_OBJECT PtrFileObject;
111 LARGE_INTEGER CurrentByteOffset;
112 /* for DirectoryControl */
114 /* for DirectoryControl */
115 PWCHAR DirectorySearchPattern;
120 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
122 #define TAG_CCB TAG('I', 'C', 'C', 'B')
126 PDRIVER_OBJECT DriverObject;
127 PDEVICE_OBJECT DeviceObject;
129 } NTFS_GLOBAL_DATA, *PNTFS_GLOBAL_DATA;
134 AttributeStandardInformation = 0x10,
135 AttributeAttributeList = 0x20,
136 AttributeFileName = 0x30,
137 AttributeObjectId = 0x40,
138 AttributeSecurityDescriptor = 0x50,
139 AttributeVolumeName = 0x60,
140 AttributeVolumeInformation = 0x70,
141 AttributeData = 0x80,
142 AttributeIndexRoot = 0x90,
143 AttributeIndexAllocation = 0xA0,
144 AttributeBitmap = 0xB0,
145 AttributeReparsePoint = 0xC0,
146 AttributeEAInformation = 0xD0,
148 AttributePropertySet = 0xF0,
149 AttributeLoggedUtilityStream = 0x100
150 } ATTRIBUTE_TYPE, *PATTRIBUTE_TYPE;
159 } NTFS_RECORD_HEADER, *PNTFS_RECORD_HEADER;
163 NTFS_RECORD_HEADER Ntfs;
164 USHORT SequenceNumber;
166 USHORT AttributeOffset;
169 ULONG BytesAllocated;
170 ULONGLONG BaseFileRecord;
171 USHORT NextAttributeNumber;
172 } FILE_RECORD_HEADER, *PFILE_RECORD_HEADER;
176 ATTRIBUTE_TYPE AttributeType;
182 USHORT AttributeNumber;
183 } ATTRIBUTE, *PATTRIBUTE;
192 } RESIDENT_ATTRIBUTE, *PRESIDENT_ATTRIBUTE;
197 ULONGLONG StartVcn; // LowVcn
198 ULONGLONG LastVcn; // HighVcn
199 USHORT RunArrayOffset;
200 USHORT CompressionUnit;
203 ULONGLONG AllocatedSize;
205 ULONGLONG InitializedSize;
206 ULONGLONG CompressedSize;
207 } NONRESIDENT_ATTRIBUTE, *PNONRESIDENT_ATTRIBUTE;
212 ULONGLONG CreationTime;
213 ULONGLONG ChangeTime;
214 ULONGLONG LastWriteTime;
215 ULONGLONG LastAccessTime;
217 ULONG AlignmentOrReserved[3];
221 ULONGLONG QuotaCharge;
224 } STANDARD_INFORMATION, *PSTANDARD_INFORMATION;
229 ATTRIBUTE_TYPE AttributeType;
233 ULONGLONG StartVcn; // LowVcn
234 ULONGLONG FileReferenceNumber;
235 USHORT AttributeNumber;
236 USHORT AlignmentOrReserved[3];
237 } ATTRIBUTE_LIST, *PATTRIBUTE_LIST;
242 ULONGLONG DirectoryFileReferenceNumber;
243 ULONGLONG CreationTime;
244 ULONGLONG ChangeTime;
245 ULONGLONG LastWriteTime;
246 ULONGLONG LastAccessTime;
247 ULONGLONG AllocatedSize;
249 ULONG FileAttributes;
250 ULONG AlignmentOrReserved;
254 } FILENAME_ATTRIBUTE, *PFILENAME_ATTRIBUTE;
263 } VOLINFO_ATTRIBUTE, *PVOLINFO_ATTRIBUTE;
266 extern PNTFS_GLOBAL_DATA NtfsGlobalData;
268 //int CdfsStrcmpi( wchar_t *str1, wchar_t *str2 );
269 //void CdfsWstrcpy( wchar_t *str1, wchar_t *str2, int max );
275 NtfsDumpAttribute(PATTRIBUTE Attribute);
281 NtfsReadSectors(IN PDEVICE_OBJECT DeviceObject,
283 IN ULONG SectorCount,
285 IN OUT PUCHAR Buffer);
288 NtfsReadRawSectors(IN PDEVICE_OBJECT DeviceObject,
290 IN ULONG SectorCount,
292 IN OUT PUCHAR Buffer);
295 NtfsDeviceIoControl(IN PDEVICE_OBJECT DeviceObject,
296 IN ULONG ControlCode,
297 IN PVOID InputBuffer,
298 IN ULONG InputBufferSize,
299 IN OUT PVOID OutputBuffer,
300 IN OUT PULONG OutputBufferSize);
306 CdfsClose(PDEVICE_OBJECT DeviceObject,
313 NtfsCreate(PDEVICE_OBJECT DeviceObject,
320 NtfsDirectoryControl(PDEVICE_OBJECT DeviceObject,
327 NtfsCreateFCB(PWCHAR FileName);
330 NtfsDestroyFCB(PFCB Fcb);
333 NtfsFCBIsDirectory(PFCB Fcb);
336 NtfsFCBIsRoot(PFCB Fcb);
339 NtfsGrabFCB(PDEVICE_EXTENSION Vcb,
343 NtfsReleaseFCB(PDEVICE_EXTENSION Vcb,
347 NtfsAddFCBToTable(PDEVICE_EXTENSION Vcb,
351 NtfsGrabFCBFromTable(PDEVICE_EXTENSION Vcb,
355 NtfsFCBInitializeCache(PVCB Vcb,
359 NtfsMakeRootFCB(PDEVICE_EXTENSION Vcb);
362 NtfsOpenRootFCB(PDEVICE_EXTENSION Vcb);
365 NtfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
367 PFILE_OBJECT FileObject);
370 NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb,
373 const PWSTR pFileName);
379 NtfsQueryInformation(PDEVICE_OBJECT DeviceObject,
386 NtfsFileSystemControl(PDEVICE_OBJECT DeviceObject,
392 NtfsOpenMft(PDEVICE_OBJECT DeviceObject,
393 PDEVICE_EXTENSION Vcb);
400 wstrcmpjoki(PWSTR s1, PWSTR s2);
403 CdfsSwapString(PWCHAR Out,
408 CdfsDateTimeToFileTime(PFCB Fcb,
412 CdfsFileFlagsToAttributes(PFCB Fcb,
413 PULONG FileAttributes);
418 CdfsRead(PDEVICE_OBJECT DeviceObject,
422 CdfsWrite(PDEVICE_OBJECT DeviceObject,
430 NtfsQueryVolumeInformation(PDEVICE_OBJECT DeviceObject,
434 NtfsSetVolumeInformation(PDEVICE_OBJECT DeviceObject,