Merging r37048, r37051, r37052, r37055 from the-real-msvc branch
[reactos.git] / reactos / include / ddk / ntddstor.h
1 /*
2 * ntddstor.h
3 *
4 * Storage class IOCTL interface.
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef __NTDDSTOR_H
24 #define __NTDDSTOR_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
35
36 #define IOCTL_STORAGE_CHECK_VERIFY \
37 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
38
39 #define IOCTL_STORAGE_CHECK_VERIFY2 \
40 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
41
42 #define IOCTL_STORAGE_EJECT_MEDIA \
43 CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
44
45 #define IOCTL_STORAGE_EJECTION_CONTROL \
46 CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
47
48 #define IOCTL_STORAGE_FIND_NEW_DEVICES \
49 CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
50
51 #define IOCTL_STORAGE_GET_DEVICE_NUMBER \
52 CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
53
54 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
55 CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
56
57 #define IOCTL_STORAGE_GET_MEDIA_TYPES \
58 CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
59
60 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
61 CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
62
63 #define IOCTL_STORAGE_LOAD_MEDIA \
64 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
65
66 #define IOCTL_STORAGE_LOAD_MEDIA2 \
67 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
68
69 #define IOCTL_STORAGE_MCN_CONTROL \
70 CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
71
72 #define IOCTL_STORAGE_MEDIA_REMOVAL \
73 CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
74
75 #define IOCTL_STORAGE_PREDICT_FAILURE \
76 CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
77
78 #define IOCTL_STORAGE_QUERY_PROPERTY \
79 CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
80
81 #define IOCTL_STORAGE_RELEASE \
82 CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
83
84 #define IOCTL_STORAGE_RESERVE \
85 CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
86
87 #define IOCTL_STORAGE_GET_HOTPLUG_INFO \
88 CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
89
90 #define IOCTL_STORAGE_SET_HOTPLUG_INFO \
91 CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
92
93 #define IOCTL_STORAGE_RESET_BUS \
94 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
95
96 #define IOCTL_STORAGE_RESET_DEVICE \
97 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
98
99
100 DEFINE_GUID(GUID_DEVINTERFACE_DISK,
101 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
102
103 DEFINE_GUID(GUID_DEVINTERFACE_CDROM,
104 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
105
106 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,
107 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
108
109 DEFINE_GUID(GUID_DEVINTERFACE_TAPE,
110 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
111
112 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,
113 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
114
115 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,
116 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
117
118 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,
119 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
120
121 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,
122 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
123
124 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,
125 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
126
127 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,
128 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
129
130 DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME,
131 0x7f108a28L, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62);
132
133 /* Aliases for storage guids */
134 #define DiskClassGuid GUID_DEVINTERFACE_DISK
135 #define CdRomClassGuid GUID_DEVINTERFACE_CDROM
136 #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION
137 #define TapeClassGuid GUID_DEVINTERFACE_TAPE
138 #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK
139 #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME
140 #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER
141 #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY
142 #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER
143 #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT
144 #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME
145
146 typedef enum _STORAGE_MEDIA_TYPE {
147 DDS_4mm = 0x20,
148 MiniQic,
149 Travan,
150 QIC,
151 MP_8mm,
152 AME_8mm,
153 AIT1_8mm,
154 DLT,
155 NCTP,
156 IBM_3480,
157 IBM_3490E,
158 IBM_Magstar_3590,
159 IBM_Magstar_MP,
160 STK_DATA_D3,
161 SONY_DTF,
162 DV_6mm,
163 DMI,
164 SONY_D2,
165 CLEANER_CARTRIDGE,
166 CD_ROM,
167 CD_R,
168 CD_RW,
169 DVD_ROM,
170 DVD_R,
171 DVD_RW,
172 MO_3_RW,
173 MO_5_WO,
174 MO_5_RW,
175 MO_5_LIMDOW,
176 PC_5_WO,
177 PC_5_RW,
178 PD_5_RW,
179 ABL_5_WO,
180 PINNACLE_APEX_5_RW,
181 SONY_12_WO,
182 PHILIPS_12_WO,
183 HITACHI_12_WO,
184 CYGNET_12_WO,
185 KODAK_14_WO,
186 MO_NFR_525,
187 NIKON_12_RW,
188 IOMEGA_ZIP,
189 IOMEGA_JAZ,
190 SYQUEST_EZ135,
191 SYQUEST_EZFLYER,
192 SYQUEST_SYJET,
193 AVATAR_F2,
194 MP2_8mm,
195 DST_S,
196 DST_M,
197 DST_L,
198 VXATape_1,
199 VXATape_2,
200 STK_9840,
201 LTO_Ultrium,
202 LTO_Accelis,
203 DVD_RAM,
204 AIT_8mm,
205 ADR_1,
206 ADR_2
207 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
208
209 typedef enum _STORAGE_BUS_TYPE {
210 BusTypeUnknown = 0x00,
211 BusTypeScsi,
212 BusTypeAtapi,
213 BusTypeAta,
214 BusType1394,
215 BusTypeSsa,
216 BusTypeFibre,
217 BusTypeUsb,
218 BusTypeRAID,
219 BusTypeMaxReserved = 0x7F
220 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
221
222 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
223 #define MEDIA_ERASEABLE 0x00000001
224 #define MEDIA_WRITE_ONCE 0x00000002
225 #define MEDIA_READ_ONLY 0x00000004
226 #define MEDIA_READ_WRITE 0x00000008
227 #define MEDIA_WRITE_PROTECTED 0x00000100
228 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
229
230 typedef struct _DEVICE_MEDIA_INFO {
231 union {
232 struct {
233 LARGE_INTEGER Cylinders;
234 STORAGE_MEDIA_TYPE MediaType;
235 ULONG TracksPerCylinder;
236 ULONG SectorsPerTrack;
237 ULONG BytesPerSector;
238 ULONG NumberMediaSides;
239 ULONG MediaCharacteristics;
240 } DiskInfo;
241 struct {
242 LARGE_INTEGER Cylinders;
243 STORAGE_MEDIA_TYPE MediaType;
244 ULONG TracksPerCylinder;
245 ULONG SectorsPerTrack;
246 ULONG BytesPerSector;
247 ULONG NumberMediaSides;
248 ULONG MediaCharacteristics;
249 } RemovableDiskInfo;
250 struct {
251 STORAGE_MEDIA_TYPE MediaType;
252 ULONG MediaCharacteristics;
253 ULONG CurrentBlockSize;
254 STORAGE_BUS_TYPE BusType;
255 union {
256 struct {
257 UCHAR MediumType;
258 UCHAR DensityCode;
259 } ScsiInformation;
260 } BusSpecificData;
261 } TapeInfo;
262 } DeviceSpecific;
263 } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
264
265 typedef struct _GET_MEDIA_TYPES {
266 ULONG DeviceType;
267 ULONG MediaInfoCount;
268 DEVICE_MEDIA_INFO MediaInfo[1];
269 } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
270
271 typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
272 ULONG Version;
273 ULONG Size;
274 ULONG MaximumTransferLength;
275 ULONG MaximumPhysicalPages;
276 ULONG AlignmentMask;
277 BOOLEAN AdapterUsesPio;
278 BOOLEAN AdapterScansDown;
279 BOOLEAN CommandQueueing;
280 BOOLEAN AcceleratedTransfer;
281 STORAGE_BUS_TYPE BusType;
282 USHORT BusMajorVersion;
283 USHORT BusMinorVersion;
284 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
285
286 typedef struct _STORAGE_BUS_RESET_REQUEST {
287 UCHAR PathId;
288 } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
289
290 typedef struct _STORAGE_DESCRIPTOR_HEADER {
291 ULONG Version;
292 ULONG Size;
293 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
294
295 typedef struct _STORAGE_DEVICE_DESCRIPTOR {
296 ULONG Version;
297 ULONG Size;
298 UCHAR DeviceType;
299 UCHAR DeviceTypeModifier;
300 BOOLEAN RemovableMedia;
301 BOOLEAN CommandQueueing;
302 ULONG VendorIdOffset;
303 ULONG ProductIdOffset;
304 ULONG ProductRevisionOffset;
305 ULONG SerialNumberOffset;
306 STORAGE_BUS_TYPE BusType;
307 ULONG RawPropertiesLength;
308 UCHAR RawDeviceProperties[1];
309 } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
310
311 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
312 ULONG Version;
313 ULONG Size;
314 ULONG NumberOfIdentifiers;
315 UCHAR Identifiers[1];
316 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
317
318 typedef struct _STORAGE_DEVICE_NUMBER {
319 DEVICE_TYPE DeviceType;
320 ULONG DeviceNumber;
321 ULONG PartitionNumber;
322 } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
323
324 typedef struct _STORAGE_PREDICT_FAILURE {
325 ULONG PredictFailure;
326 UCHAR VendorSpecific[512];
327 } STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
328
329 typedef enum _STORAGE_PROPERTY_ID {
330 StorageDeviceProperty = 0,
331 StorageAdapterProperty,
332 StorageDeviceIdProperty,
333 StorageDeviceUniqueIdProperty,
334 StorageDeviceWriteCacheProperty,
335 StorageMiniportProperty,
336 StorageAccessAlignmentProperty
337 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
338
339 typedef enum _STORAGE_QUERY_TYPE {
340 PropertyStandardQuery = 0,
341 PropertyExistsQuery,
342 PropertyMaskQuery,
343 PropertyQueryMaxDefined
344 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
345
346 typedef struct _STORAGE_PROPERTY_QUERY {
347 STORAGE_PROPERTY_ID PropertyId;
348 STORAGE_QUERY_TYPE QueryType;
349 UCHAR AdditionalParameters[1];
350 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
351
352 typedef struct _PREVENT_MEDIA_REMOVAL {
353 BOOLEAN PreventMediaRemoval;
354 } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL;
355
356 #ifdef __cplusplus
357 }
358 #endif
359
360 #endif /* __NTDDSTOR_H */