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