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;
111 PFILE_OBJECT PtrFileObject;
112 LARGE_INTEGER CurrentByteOffset;
113 /* for DirectoryControl */
115 /* for DirectoryControl */
116 PWCHAR DirectorySearchPattern;
121 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
123 #define TAG_CCB TAG('I', 'C', 'C', 'B')
127 PDRIVER_OBJECT DriverObject;
128 PDEVICE_OBJECT DeviceObject;
130 } NTFS_GLOBAL_DATA, *PNTFS_GLOBAL_DATA;
135 AttributeStandardInformation = 0x10,
136 AttributeAttributeList = 0x20,
137 AttributeFileName = 0x30,
138 AttributeObjectId = 0x40,
139 AttributeSecurityDescriptor = 0x50,
140 AttributeVolumeName = 0x60,
141 AttributeVolumeInformation = 0x70,
142 AttributeData = 0x80,
143 AttributeIndexRoot = 0x90,
144 AttributeIndexAllocation = 0xA0,
145 AttributeBitmap = 0xB0,
146 AttributeReparsePoint = 0xC0,
147 AttributeEAInformation = 0xD0,
149 AttributePropertySet = 0xF0,
150 AttributeLoggedUtilityStream = 0x100
151 } ATTRIBUTE_TYPE, *PATTRIBUTE_TYPE;
160 } NTFS_RECORD_HEADER, *PNTFS_RECORD_HEADER;
164 NTFS_RECORD_HEADER Ntfs;
165 USHORT SequenceNumber;
167 USHORT AttributeOffset;
170 ULONG BytesAllocated;
171 ULONGLONG BaseFileRecord;
172 USHORT NextAttributeNumber;
173 } FILE_RECORD_HEADER, *PFILE_RECORD_HEADER;
177 ATTRIBUTE_TYPE AttributeType;
183 USHORT AttributeNumber;
184 } ATTRIBUTE, *PATTRIBUTE;
193 } RESIDENT_ATTRIBUTE, *PRESIDENT_ATTRIBUTE;
198 ULONGLONG StartVcn; // LowVcn
199 ULONGLONG LastVcn; // HighVcn
200 USHORT RunArrayOffset;
201 USHORT CompressionUnit;
204 ULONGLONG AllocatedSize;
206 ULONGLONG InitializedSize;
207 ULONGLONG CompressedSize;
208 } NONRESIDENT_ATTRIBUTE, *PNONRESIDENT_ATTRIBUTE;
213 ULONGLONG CreationTime;
214 ULONGLONG ChangeTime;
215 ULONGLONG LastWriteTime;
216 ULONGLONG LastAccessTime;
218 ULONG AlignmentOrReserved[3];
222 ULONGLONG QuotaCharge;
225 } STANDARD_INFORMATION, *PSTANDARD_INFORMATION;
230 ATTRIBUTE_TYPE AttributeType;
234 ULONGLONG StartVcn; // LowVcn
235 ULONGLONG FileReferenceNumber;
236 USHORT AttributeNumber;
237 USHORT AlignmentOrReserved[3];
238 } ATTRIBUTE_LIST, *PATTRIBUTE_LIST;
243 ULONGLONG DirectoryFileReferenceNumber;
244 ULONGLONG CreationTime;
245 ULONGLONG ChangeTime;
246 ULONGLONG LastWriteTime;
247 ULONGLONG LastAccessTime;
248 ULONGLONG AllocatedSize;
250 ULONG FileAttributes;
251 ULONG AlignmentOrReserved;
255 } FILENAME_ATTRIBUTE, *PFILENAME_ATTRIBUTE;
264 } VOLINFO_ATTRIBUTE, *PVOLINFO_ATTRIBUTE;
267 extern PNTFS_GLOBAL_DATA NtfsGlobalData;
269 //int CdfsStrcmpi( wchar_t *str1, wchar_t *str2 );
270 //void CdfsWstrcpy( wchar_t *str1, wchar_t *str2, int max );
276 NtfsDumpAttribute(PATTRIBUTE Attribute);
282 NtfsReadSectors(IN PDEVICE_OBJECT DeviceObject,
284 IN ULONG SectorCount,
286 IN OUT PUCHAR Buffer);
289 NtfsReadRawSectors(IN PDEVICE_OBJECT DeviceObject,
291 IN ULONG SectorCount,
293 IN OUT PUCHAR Buffer);
296 NtfsDeviceIoControl(IN PDEVICE_OBJECT DeviceObject,
297 IN ULONG ControlCode,
298 IN PVOID InputBuffer,
299 IN ULONG InputBufferSize,
300 IN OUT PVOID OutputBuffer,
301 IN OUT PULONG OutputBufferSize);
307 CdfsClose(PDEVICE_OBJECT DeviceObject,
314 NtfsCreate(PDEVICE_OBJECT DeviceObject,
321 NtfsDirectoryControl(PDEVICE_OBJECT DeviceObject,
328 NtfsCreateFCB(PWCHAR FileName);
331 NtfsDestroyFCB(PFCB Fcb);
334 NtfsFCBIsDirectory(PFCB Fcb);
337 NtfsFCBIsRoot(PFCB Fcb);
340 NtfsGrabFCB(PDEVICE_EXTENSION Vcb,
344 NtfsReleaseFCB(PDEVICE_EXTENSION Vcb,
348 NtfsAddFCBToTable(PDEVICE_EXTENSION Vcb,
352 NtfsGrabFCBFromTable(PDEVICE_EXTENSION Vcb,
356 NtfsFCBInitializeCache(PVCB Vcb,
360 NtfsMakeRootFCB(PDEVICE_EXTENSION Vcb);
363 NtfsOpenRootFCB(PDEVICE_EXTENSION Vcb);
366 NtfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
368 PFILE_OBJECT FileObject);
371 NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb,
374 const PWSTR pFileName);
380 NtfsQueryInformation(PDEVICE_OBJECT DeviceObject,
387 NtfsFileSystemControl(PDEVICE_OBJECT DeviceObject,
393 NtfsOpenMft(PDEVICE_OBJECT DeviceObject,
394 PDEVICE_EXTENSION Vcb);
401 wstrcmpjoki(PWSTR s1, PWSTR s2);
404 CdfsSwapString(PWCHAR Out,
409 CdfsDateTimeToFileTime(PFCB Fcb,
413 CdfsFileFlagsToAttributes(PFCB Fcb,
414 PULONG FileAttributes);
419 CdfsRead(PDEVICE_OBJECT DeviceObject,
423 CdfsWrite(PDEVICE_OBJECT DeviceObject,
431 NtfsQueryVolumeInformation(PDEVICE_OBJECT DeviceObject,
435 NtfsSetVolumeInformation(PDEVICE_OBJECT DeviceObject,