3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
6 * PURPOSE: Disk related definitions used by all the parts of the system
7 * PROGRAMMER: David Welch <welch@cwcom.net>
12 #ifndef __INCLUDE_DISK_H
13 #define __INCLUDE_DISK_H
16 #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(FILE_DEVICE_DISK, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
17 #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(FILE_DEVICE_DISK, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
18 #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(FILE_DEVICE_DISK, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
19 #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(FILE_DEVICE_DISK, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
20 #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(FILE_DEVICE_DISK, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
21 #define IOCTL_DISK_VERIFY CTL_CODE(FILE_DEVICE_DISK, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
22 #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(FILE_DEVICE_DISK, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
23 #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(FILE_DEVICE_DISK, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
24 #define IOCTL_DISK_PERFORMANCE CTL_CODE(FILE_DEVICE_DISK, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
25 #define IOCTL_DISK_IS_WRITABLE CTL_CODE(FILE_DEVICE_DISK, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
26 #define IOCTL_DISK_LOGGING CTL_CODE(FILE_DEVICE_DISK, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
27 #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(FILE_DEVICE_DISK, 11, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
28 #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(FILE_DEVICE_DISK, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
29 #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(FILE_DEVICE_DISK, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
30 #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(FILE_DEVICE_DISK, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
31 #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(FILE_DEVICE_DISK, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
32 #define IOCTL_DISK_REQUEST_DATA CTL_CODE(FILE_DEVICE_DISK, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
33 #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(FILE_DEVICE_DISK, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
34 #define IOCTL_DISK_GET_PARTITION_INFO_EX CTL_CODE(FILE_DEVICE_DISK, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
35 #define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(FILE_DEVICE_DISK, 23, METHOD_BUFFERED, FILE_READ_ACCESS)
36 #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(FILE_DEVICE_DISK, 0x200, METHOD_BUFFERED, FILE_READ_ACCESS)
37 #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(FILE_DEVICE_DISK, 0x201, METHOD_BUFFERED, FILE_READ_ACCESS)
40 #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(FILE_DEVICE_MASS_STORAGE, 0x305, METHOD_BUFFERED, FILE_ANY_ACCESS)
43 #define PARTITION_ENTRY_UNUSED 0x00
44 #define PARTITION_FAT_12 0x01
45 #define PARTITION_XENIX_1 0x02
46 #define PARTITION_XENIX_2 0x03
47 #define PARTITION_FAT_16 0x04
48 #define PARTITION_EXTENDED 0x05
49 #define PARTITION_HUGE 0x06
50 #define PARTITION_IFS 0x07
51 #define PARTITION_FAT32 0x0B
52 #define PARTITION_FAT32_XINT13 0x0C
53 #define PARTITION_XINT13 0x0E
54 #define PARTITION_XINT13_EXTENDED 0x0F
55 #define PARTITION_PREP 0x41
56 #define PARTITION_LDM 0x42
57 #define PARTITION_UNIX 0x63
59 #define PARTITION_NTFT 0x80
60 #define VALID_NTFT 0xC0
64 #define PTDOS3xPrimary 0x01
65 #define PTXENIXRoot 0x02
66 #define PTXENIXUsr 0x03
67 #define PTOLDDOS16Bit 0x04
68 #define PTDosExtended 0x05
69 #define PTDos5xPrimary 0x06
70 #define PTIfs 0x07 // e.g.: HPFS, NTFS, etc
72 #define PTAIXBootable 0x09
73 #define PTOS2BootMgr 0x0A
74 #define PTWin95FAT32 0x0B
75 #define PTWin95FAT32LBA 0x0C
76 #define PTWin95FAT16LBA 0x0E
77 #define PTWin95ExtendedLBA 0x0F
78 #define PTVenix286 0x40
80 #define PTMicroport 0x52
81 #define PTGnuHurd 0x63
82 #define PTNetware286 0x64
83 #define PTNetware386 0x65
85 #define PTOldMinix 0x80
87 #define PTLinuxSwap 0x82
88 #define PTLinuxExt2 0x83
90 #define PTAmoebaBBT 0x94
93 #define PTBSDISwap 0xB8
96 #define PTDOSAccess 0xE1
98 #define PTDOSSecondary 0xF2
102 #define IsRecognizedPartition(P) \
103 ((P) == PARTITION_FAT_12 || \
104 (P) == PARTITION_FAT_16 || \
105 (P) == PARTITION_HUGE || \
106 (P) == PARTITION_IFS || \
107 (P) == PARTITION_FAT32 || \
108 (P) == PARTITION_FAT32_XINT13 || \
109 (P) == PARTITION_XINT13)
111 #define IsContainerPartition(P) \
112 ((P) == PARTITION_EXTENDED || \
113 (P) == PARTITION_XINT13_EXTENDED)
116 typedef enum _MEDIA_TYPE
133 typedef struct _PARTITION_INFORMATION
135 LARGE_INTEGER StartingOffset;
136 LARGE_INTEGER PartitionLength;
138 DWORD PartitionNumber;
140 BOOLEAN BootIndicator;
141 BOOLEAN RecognizedPartition;
142 BOOLEAN RewritePartition;
143 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
145 typedef enum _PARTITION_STYLE
152 typedef struct _PARTITION_INFORMATION_MBR
155 BOOLEAN BootIndicator;
156 BOOLEAN RecognizedPartition;
158 } PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR;
160 #ifndef _GUID_DEFINED
161 #define _GUID_DEFINED
165 unsigned short Data2;
166 unsigned short Data3;
167 unsigned char Data4[8];
169 typedef GUID CLSID, *LPCLSID;
172 typedef struct _PARTITION_INFORMATION_GPT
178 } PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT;
180 typedef struct _PARTITION_INFORMATION_EX
182 PARTITION_STYLE PartitionStyle;
183 LARGE_INTEGER StartingOffset;
184 LARGE_INTEGER PartitionLength;
185 DWORD PartitionNumber;
186 BOOLEAN RewritePartition;
189 PARTITION_INFORMATION_MBR Mbr;
190 PARTITION_INFORMATION_GPT Gpt;
192 #ifdef ANONYMOUSUNIONS
195 PARTITION_INFORMATION_MBR Mbr;
196 PARTITION_INFORMATION_GPT Gpt;
198 #endif /* ANONYMOUSUNIONS */
199 } PARTITION_INFORMATION_EX, *PPARTITION_INFORMATION_EX;
201 typedef struct _SET_PARTITION_INFORMATION
204 } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
206 typedef struct _DISK_GEOMETRY
208 LARGE_INTEGER Cylinders;
209 MEDIA_TYPE MediaType;
210 DWORD TracksPerCylinder;
211 DWORD SectorsPerTrack;
212 DWORD BytesPerSector;
213 } DISK_GEOMETRY, *PDISK_GEOMETRY;
215 typedef struct _DISK_CONTROLLER_NUMBER {
216 ULONG ControllerNumber;
218 } DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;
220 typedef struct _GET_LENGTH_INFORMATION {
221 LARGE_INTEGER Length; /* length of disk/partition/volume in bytes */
222 } GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION;
226 typedef struct _DRIVE_LAYOUT_INFORMATION
228 DWORD PartitionCount;
230 PARTITION_INFORMATION PartitionEntry[1];
231 } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
233 #endif /* !__USE_W32API */
235 #endif /* __INCLUDE_DISK_H */