Move MS DDK files to DDK
[reactos.git] / reactos / w32api / 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_RESET_BUS \
88 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
89
90 #define IOCTL_STORAGE_RESET_DEVICE \
91 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
92
93
94 DEFINE_GUID(GUID_DEVINTERFACE_DISK,
95 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
96
97 DEFINE_GUID(GUID_DEVINTERFACE_CDROM,
98 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
99
100 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,
101 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
102
103 DEFINE_GUID(GUID_DEVINTERFACE_TAPE,
104 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
105
106 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,
107 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
108
109 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,
110 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
111
112 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,
113 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
114
115 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,
116 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
117
118 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,
119 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
120
121 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,
122 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
123
124
125 typedef enum _STORAGE_MEDIA_TYPE {
126 DDS_4mm = 0x20,
127 MiniQic,
128 Travan,
129 QIC,
130 MP_8mm,
131 AME_8mm,
132 AIT1_8mm,
133 DLT,
134 NCTP,
135 IBM_3480,
136 IBM_3490E,
137 IBM_Magstar_3590,
138 IBM_Magstar_MP,
139 STK_DATA_D3,
140 SONY_DTF,
141 DV_6mm,
142 DMI,
143 SONY_D2,
144 CLEANER_CARTRIDGE,
145 CD_ROM,
146 CD_R,
147 CD_RW,
148 DVD_ROM,
149 DVD_R,
150 DVD_RW,
151 MO_3_RW,
152 MO_5_WO,
153 MO_5_RW,
154 MO_5_LIMDOW,
155 PC_5_WO,
156 PC_5_RW,
157 PD_5_RW,
158 ABL_5_WO,
159 PINNACLE_APEX_5_RW,
160 SONY_12_WO,
161 PHILIPS_12_WO,
162 HITACHI_12_WO,
163 CYGNET_12_WO,
164 KODAK_14_WO,
165 MO_NFR_525,
166 NIKON_12_RW,
167 IOMEGA_ZIP,
168 IOMEGA_JAZ,
169 SYQUEST_EZ135,
170 SYQUEST_EZFLYER,
171 SYQUEST_SYJET,
172 AVATAR_F2,
173 MP2_8mm,
174 DST_S,
175 DST_M,
176 DST_L,
177 VXATape_1,
178 VXATape_2,
179 STK_9840,
180 LTO_Ultrium,
181 LTO_Accelis,
182 DVD_RAM,
183 AIT_8mm,
184 ADR_1,
185 ADR_2
186 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
187
188 typedef enum _STORAGE_BUS_TYPE {
189 BusTypeUnknown = 0x00,
190 BusTypeScsi,
191 BusTypeAtapi,
192 BusTypeAta,
193 BusType1394,
194 BusTypeSsa,
195 BusTypeFibre,
196 BusTypeUsb,
197 BusTypeRAID,
198 BusTypeMaxReserved = 0x7F
199 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
200
201 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
202 #define MEDIA_ERASEABLE 0x00000001
203 #define MEDIA_WRITE_ONCE 0x00000002
204 #define MEDIA_READ_ONLY 0x00000004
205 #define MEDIA_READ_WRITE 0x00000008
206 #define MEDIA_WRITE_PROTECTED 0x00000100
207 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
208
209 typedef struct _DEVICE_MEDIA_INFO {
210 union {
211 struct {
212 LARGE_INTEGER Cylinders;
213 STORAGE_MEDIA_TYPE MediaType;
214 ULONG TracksPerCylinder;
215 ULONG SectorsPerTrack;
216 ULONG BytesPerSector;
217 ULONG NumberMediaSides;
218 ULONG MediaCharacteristics;
219 } DiskInfo;
220 struct {
221 LARGE_INTEGER Cylinders;
222 STORAGE_MEDIA_TYPE MediaType;
223 ULONG TracksPerCylinder;
224 ULONG SectorsPerTrack;
225 ULONG BytesPerSector;
226 ULONG NumberMediaSides;
227 ULONG MediaCharacteristics;
228 } RemovableDiskInfo;
229 struct {
230 STORAGE_MEDIA_TYPE MediaType;
231 ULONG MediaCharacteristics;
232 ULONG CurrentBlockSize;
233 STORAGE_BUS_TYPE BusType;
234 union {
235 struct {
236 UCHAR MediumType;
237 UCHAR DensityCode;
238 } ScsiInformation;
239 } BusSpecificData;
240 } TapeInfo;
241 } DeviceSpecific;
242 } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
243
244 typedef struct _GET_MEDIA_TYPES {
245 ULONG DeviceType;
246 ULONG MediaInfoCount;
247 DEVICE_MEDIA_INFO MediaInfo[1];
248 } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
249
250 typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
251 ULONG Version;
252 ULONG Size;
253 ULONG MaximumTransferLength;
254 ULONG MaximumPhysicalPages;
255 ULONG AlignmentMask;
256 BOOLEAN AdapterUsesPio;
257 BOOLEAN AdapterScansDown;
258 BOOLEAN CommandQueueing;
259 BOOLEAN AcceleratedTransfer;
260 STORAGE_BUS_TYPE BusType;
261 USHORT BusMajorVersion;
262 USHORT BusMinorVersion;
263 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
264
265 typedef struct _STORAGE_BUS_RESET_REQUEST {
266 UCHAR PathId;
267 } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
268
269 typedef struct _STORAGE_DESCRIPTOR_HEADER {
270 ULONG Version;
271 ULONG Size;
272 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
273
274 typedef struct _STORAGE_DEVICE_DESCRIPTOR {
275 ULONG Version;
276 ULONG Size;
277 UCHAR DeviceType;
278 UCHAR DeviceTypeModifier;
279 BOOLEAN RemovableMedia;
280 BOOLEAN CommandQueueing;
281 ULONG VendorIdOffset;
282 ULONG ProductIdOffset;
283 ULONG ProductRevisionOffset;
284 ULONG SerialNumberOffset;
285 STORAGE_BUS_TYPE BusType;
286 ULONG RawPropertiesLength;
287 UCHAR RawDeviceProperties[1];
288 } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
289
290 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
291 ULONG Version;
292 ULONG Size;
293 ULONG NumberOfIdentifiers;
294 UCHAR Identifiers[1];
295 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
296
297 typedef struct _STORAGE_DEVICE_NUMBER {
298 DEVICE_TYPE DeviceType;
299 ULONG DeviceNumber;
300 ULONG PartitionNumber;
301 } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
302
303 typedef struct _STORAGE_PREDICT_FAILURE {
304 ULONG PredictFailure;
305 UCHAR VendorSpecific[512];
306 } STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
307
308 typedef enum _STORAGE_PROPERTY_ID {
309 StorageDeviceProperty = 0,
310 StorageAdapterProperty,
311 StorageDeviceIdProperty
312 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
313
314 typedef enum _STORAGE_QUERY_TYPE {
315 PropertyStandardQuery = 0,
316 PropertyExistsQuery,
317 PropertyMaskQuery,
318 PropertyQueryMaxDefined
319 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
320
321 typedef struct _STORAGE_PROPERTY_QUERY {
322 STORAGE_PROPERTY_ID PropertyId;
323 STORAGE_QUERY_TYPE QueryType;
324 UCHAR AdditionalParameters[1];
325 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
326
327 #ifdef __cplusplus
328 }
329 #endif
330
331 #endif /* __NTDDSTOR_H */