ObInitializeObject(): Pre-clear object HEADER to prevent undeterministic bugs.
[reactos.git] / include / ntos / disk.h
1 /* $Id$
2  *
3  * COPYRIGHT:    See COPYING in the top level directory
4  * PROJECT:      ReactOS kernel
5  * FILE:         include/disk.h
6  * PURPOSE:      Disk related definitions used by all the parts of the system
7  * PROGRAMMER:   David Welch <welch@cwcom.net>
8  * UPDATE HISTORY: 
9  *               27/06/00: Created
10  */
11
12 #ifndef __INCLUDE_DISK_H
13 #define __INCLUDE_DISK_H
14
15
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)
38
39
40 #define IOCTL_STORAGE_GET_HOTPLUG_INFO   CTL_CODE(FILE_DEVICE_MASS_STORAGE, 0x305, METHOD_BUFFERED, FILE_ANY_ACCESS)
41
42
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
58
59 #define PARTITION_NTFT                  0x80
60 #define VALID_NTFT                      0xC0
61
62 #if 0
63 #define PTEmpty                         0x00
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
71 #define PTAIX                           0x08
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
79 #define PTNovell                        0x51
80 #define PTMicroport                     0x52
81 #define PTGnuHurd                       0x63
82 #define PTNetware286                    0x64
83 #define PTNetware386                    0x65
84 #define PTPCIX                          0x75
85 #define PTOldMinix                      0x80
86 #define PTMinix                         0x81
87 #define PTLinuxSwap                     0x82
88 #define PTLinuxExt2                     0x83
89 #define PTAmoeba                        0x93
90 #define PTAmoebaBBT                     0x94
91 #define PTBSD                           0xA5
92 #define PTBSDIFS                        0xB7
93 #define PTBSDISwap                      0xB8
94 #define PTSyrinx                        0xC7
95 #define PTCPM                           0xDB
96 #define PTDOSAccess                     0xE1
97 #define PTDOSRO                         0xE3
98 #define PTDOSSecondary                  0xF2
99 #define PTBBT                           0xFF
100 #endif
101
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)
110
111 #define IsContainerPartition(P)  \
112     ((P) == PARTITION_EXTENDED || \
113      (P) == PARTITION_XINT13_EXTENDED)
114
115
116 typedef enum _MEDIA_TYPE
117 {
118   Unknown,
119   F5_1Pt2_512,
120   F3_1Pt44_512,
121   F3_2Pt88_512,
122   F3_20Pt8_512,
123   F3_720_512,
124   F5_360_512,
125   F5_320_512,
126   F5_320_1024,
127   F5_180_512,
128   F5_160_512,
129   RemovableMedia,
130   FixedMedia
131 } MEDIA_TYPE;
132
133 typedef struct _PARTITION_INFORMATION
134 {
135   LARGE_INTEGER StartingOffset;
136   LARGE_INTEGER PartitionLength;
137   DWORD HiddenSectors;
138   DWORD PartitionNumber;
139   BYTE PartitionType;
140   BOOLEAN BootIndicator;
141   BOOLEAN RecognizedPartition;
142   BOOLEAN RewritePartition;
143 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
144
145 typedef enum _PARTITION_STYLE
146 {
147   PARTITION_STYLE_MBR,
148   PARTITION_STYLE_GPT,
149   PARTITION_STYLE_RAW
150 } PARTITION_STYLE;
151
152 typedef struct _PARTITION_INFORMATION_MBR
153 {
154   BYTE  PartitionType;
155   BOOLEAN BootIndicator;
156   BOOLEAN RecognizedPartition;
157   DWORD HiddenSectors;
158 } PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR;
159
160 #ifndef _GUID_DEFINED
161 #define _GUID_DEFINED
162 typedef struct _GUID
163 {
164     unsigned long  Data1;
165     unsigned short  Data2;
166     unsigned short  Data3;
167     unsigned char Data4[8];
168 } GUID, *LPGUID;
169 typedef GUID CLSID, *LPCLSID;
170 #endif
171
172 typedef struct _PARTITION_INFORMATION_GPT
173 {
174   GUID PartitionType;
175   GUID PartitionId;
176   DWORD64 Attributes;
177   WCHAR Name [36];
178 } PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT;
179
180 typedef struct _PARTITION_INFORMATION_EX
181 {
182   PARTITION_STYLE PartitionStyle;
183   LARGE_INTEGER StartingOffset;
184   LARGE_INTEGER PartitionLength;
185   DWORD PartitionNumber;
186   BOOLEAN RewritePartition;
187   union
188   {
189     PARTITION_INFORMATION_MBR Mbr;
190     PARTITION_INFORMATION_GPT Gpt;
191   } u;
192 #ifdef ANONYMOUSUNIONS
193   union
194   {
195     PARTITION_INFORMATION_MBR Mbr;
196     PARTITION_INFORMATION_GPT Gpt;
197   };
198 #endif /* ANONYMOUSUNIONS */
199 } PARTITION_INFORMATION_EX, *PPARTITION_INFORMATION_EX;
200
201 typedef struct _SET_PARTITION_INFORMATION
202 {
203   ULONG PartitionType;
204 } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
205
206 typedef struct _DISK_GEOMETRY
207 {
208   LARGE_INTEGER Cylinders;
209   MEDIA_TYPE MediaType;
210   DWORD TracksPerCylinder;
211   DWORD SectorsPerTrack;
212   DWORD BytesPerSector;
213 } DISK_GEOMETRY, *PDISK_GEOMETRY;
214
215 typedef struct _DISK_CONTROLLER_NUMBER {
216   ULONG ControllerNumber;
217   ULONG DiskNumber;
218 } DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;
219
220 typedef struct _GET_LENGTH_INFORMATION {
221   LARGE_INTEGER Length; /* length of disk/partition/volume in bytes */
222 } GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION;
223
224 #ifndef __USE_W32API
225
226 typedef struct _DRIVE_LAYOUT_INFORMATION
227 {
228   DWORD PartitionCount;
229   DWORD Signature;
230   PARTITION_INFORMATION PartitionEntry[1];
231 } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
232
233 #endif /* !__USE_W32API */
234
235 #endif /* __INCLUDE_DISK_H */
236
237 /* EOF */