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
17 #define IOCTL_DISK_BASE FILE_DEVICE_DISK
19 #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
20 #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
21 #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
22 #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
23 #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
24 #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
25 #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
26 #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
27 #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
28 #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
29 #define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE, 0x000A, METHOD_BUFFERED, FILE_ANY_ACCESS)
30 #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
31 #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000C, METHOD_BUFFERED, FILE_ANY_ACCESS)
32 #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE, 0x000D, METHOD_BUFFERED, FILE_ANY_ACCESS)
33 #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE, 0x000E, METHOD_BUFFERED, FILE_ANY_ACCESS)
34 #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000F, METHOD_BUFFERED, FILE_ANY_ACCESS)
35 #define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
36 #define IOCTL_DISK_CONTRIOLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
38 #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
39 #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
40 #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
42 #define IOCTL_DISK_INTERNAL_SET_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS)
43 #define IOCTL_DISK_INTERNAL_CLEAR_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS)
45 #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
46 #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
47 #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
48 #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
49 #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
50 #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
51 #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
52 #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
55 #define PARTITION_ENTRY_UNUSED 0x00
56 #define PARTITION_FAT_12 0x01
57 #define PARTITION_XENIX_1 0x02
58 #define PARTITION_XENIX_2 0x03
59 #define PARTITION_FAT_16 0x04
60 #define PARTITION_EXTENDED 0x05
61 #define PARTITION_HUGE 0x06
62 #define PARTITION_IFS 0x07
63 #define PARTITION_FAT32 0x0B
64 #define PARTITION_FAT32_XINT13 0x0C
65 #define PARTITION_XINT13 0x0E
66 #define PARTITION_XINT13_EXTENDED 0x0F
67 #define PARTITION_PREP 0x41
68 #define PARTITION_LDM 0x42
69 #define PARTITION_UNIX 0x63
70 #define PARTITION_EXT2 0x83
72 #define PARTITION_NTFT 0x80
73 #define VALID_NTFT 0xC0
77 #define PTDOS3xPrimary 0x01
78 #define PTXENIXRoot 0x02
79 #define PTXENIXUsr 0x03
80 #define PTOLDDOS16Bit 0x04
81 #define PTDosExtended 0x05
82 #define PTDos5xPrimary 0x06
83 #define PTIfs 0x07 /* e.g.: HPFS, NTFS, etc */
85 #define PTAIXBootable 0x09
86 #define PTOS2BootMgr 0x0A
87 #define PTWin95FAT32 0x0B
88 #define PTWin95FAT32LBA 0x0C
89 #define PTWin95FAT16LBA 0x0E
90 #define PTWin95ExtendedLBA 0x0F
91 #define PTVenix286 0x40
93 #define PTMicroport 0x52
94 #define PTGnuHurd 0x63
95 #define PTNetware286 0x64
96 #define PTNetware386 0x65
98 #define PTOldMinix 0x80
100 #define PTLinuxSwap 0x82
101 #define PTLinuxExt2 0x83
102 #define PTAmoeba 0x93
103 #define PTAmoebaBBT 0x94
105 #define PTBSDIFS 0xB7
106 #define PTBSDISwap 0xB8
107 #define PTSyrinx 0xC7
109 #define PTDOSAccess 0xE1
111 #define PTDOSSecondary 0xF2
115 #define IsRecognizedPartition(P) \
116 ((P) == PARTITION_FAT_12 || \
117 (P) == PARTITION_FAT_16 || \
118 (P) == PARTITION_HUGE || \
119 (P) == PARTITION_IFS || \
120 (P) == PARTITION_FAT32 || \
121 (P) == PARTITION_FAT32_XINT13 || \
122 (P) == PARTITION_XINT13 || \
123 (P) == PARTITION_EXT2)
125 #define IsContainerPartition(P) \
126 ((P) == PARTITION_EXTENDED || \
127 (P) == PARTITION_XINT13_EXTENDED)
130 typedef enum _MEDIA_TYPE
147 typedef struct _PARTITION_INFORMATION
149 LARGE_INTEGER StartingOffset
;
150 LARGE_INTEGER PartitionLength
;
152 DWORD PartitionNumber
;
154 BOOLEAN BootIndicator
;
155 BOOLEAN RecognizedPartition
;
156 BOOLEAN RewritePartition
;
157 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
159 typedef struct _SET_PARTITION_INFORMATION
162 } SET_PARTITION_INFORMATION
, *PSET_PARTITION_INFORMATION
;
164 typedef struct _DISK_GEOMETRY
166 LARGE_INTEGER Cylinders
;
167 MEDIA_TYPE MediaType
;
168 DWORD TracksPerCylinder
;
169 DWORD SectorsPerTrack
;
170 DWORD BytesPerSector
;
171 } DISK_GEOMETRY
, *PDISK_GEOMETRY
;
173 typedef struct _DRIVE_LAYOUT_INFORMATION
175 DWORD PartitionCount
;
177 PARTITION_INFORMATION PartitionEntry
[1];
178 } DRIVE_LAYOUT_INFORMATION
;
180 typedef DRIVE_LAYOUT_INFORMATION
*PDRIVE_LAYOUT_INFORMATION
;
183 #endif /* __INCLUDE_DISK_H */