OSDN Git Service

Prepare environment for Earnie's tools.
[mingw/mingw-org-wsl.git] / w32api / include / ddk / ntddstor.h
1 /*
2  * ddk/ntddstor.h
3  *
4  * Windows Device Driver Kit -- storage class IOCTL interface.
5  *
6  * $Id$
7  *
8  * Written by Casper S. Hornstrup  <chorns@users.sourceforge.net>
9  * Copyright (C) 2002, 2004, 2015, 2016, MinGW.org Project.
10  *
11  *
12  * Permission is hereby granted, free of charge, to any person obtaining a
13  * copy of this software and associated documentation files (the "Software"),
14  * to deal in the Software without restriction, including without limitation
15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16  * and/or sell copies of the Software, and to permit persons to whom the
17  * Software is furnished to do so, subject to the following conditions:
18  *
19  * The above copyright notice, this permission notice, and the following
20  * disclaimer shall be included in all copies or substantial portions of
21  * the Software.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
26  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
29  * DEALINGS IN THE SOFTWARE.
30  *
31  */
32 #ifndef _DDK_NTDDSTOR_H
33 #pragma GCC system_header
34
35 /* This file supports partial inclusion by <winioctl.h>; defer definition
36  * of its normal repeat inclusion guard macro...
37  */
38 #ifndef __WINIOCTL_H_SOURCED__
39 /* ...until we've ascertained that this is NOT such partial inclusion.
40  */
41 #define _DDK_NTDDSTOR_H
42
43 /* In case of full inclusion, we must also include the full content of:
44  */
45 #include "ntddk.h"
46 #endif
47
48 #if ! (defined _DDK_NTDDSTOR_H && defined _WINIOCTL_H)
49 /* The majority of the IOCTL_STORAGE control code generator macros,
50  * structural type STORAGE_BUS_TYPE, and its associated pointer type,
51  * are required to be defined by both <ddk/ntddstor.h> and <winioctl.h>,
52  * but if both repeat inclusion guards are already defined, then we've
53  * already seen this; there is no need to process it again.
54  */
55 #define __IOCTL_STORAGE_(FN,M,A)            CTL_CODE(IOCTL_STORAGE_BASE,(FN),(M),(A))
56
57 #define IOCTL_STORAGE_BASE                  FILE_DEVICE_MASS_STORAGE
58 #define IOCTL_STORAGE_CHECK_VERIFY        __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0200)
59 #define IOCTL_STORAGE_CHECK_VERIFY2       __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0200)
60 #define IOCTL_STORAGE_MEDIA_REMOVAL       __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0201)
61 #define IOCTL_STORAGE_EJECT_MEDIA         __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0202)
62 #define IOCTL_STORAGE_LOAD_MEDIA          __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0203)
63 #define IOCTL_STORAGE_LOAD_MEDIA2         __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0203)
64 #define IOCTL_STORAGE_RESERVE             __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0204)
65 #define IOCTL_STORAGE_RELEASE             __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0205)
66 #define IOCTL_STORAGE_FIND_NEW_DEVICES    __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0206)
67 #define IOCTL_STORAGE_EJECTION_CONTROL    __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0250)
68 #define IOCTL_STORAGE_MCN_CONTROL         __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0251)
69 #define IOCTL_STORAGE_GET_MEDIA_TYPES     __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0300)
70 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX  __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0301)
71 #define IOCTL_STORAGE_RESET_BUS           __FILE_RW_BUFFERED(__IOCTL_STORAGE_,0x0400)
72 #define IOCTL_STORAGE_RESET_DEVICE        __FILE_RW_BUFFERED(__IOCTL_STORAGE_,0x0401)
73 #define IOCTL_STORAGE_GET_DEVICE_NUMBER   __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0420)
74 #define IOCTL_STORAGE_PREDICT_FAILURE     __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0440)
75
76 typedef
77 enum _STORAGE_BUS_TYPE
78 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff566356(v=vs.85).aspx */
79 { BusTypeUnknown                = 0x00,
80   BusTypeScsi                   = 0x01,
81   BusTypeAtapi                  = 0x02,
82   BusTypeAta                    = 0x03,
83   BusType1394                   = 0x04,
84   BusTypeSsa                    = 0x05,
85   BusTypeFibre                  = 0x06,
86   BusTypeUsb                    = 0x07,
87   BusTypeRAID                   = 0x08,
88   BusTypeiScsi                  = 0x09,
89   BusTypeSas                    = 0x0A,
90   BusTypeSata                   = 0x0B,
91   BusTypeSd                     = 0x0C,
92   BusTypeMmc                    = 0x0D,
93   BusTypeVirtual                = 0x0E,
94   BusTypeFileBackedVirtual      = 0x0F,
95   BusTypeSpaces                 = 0x10,
96   BusTypeMax                    /* variant; number of bus types */,
97   BusTypeMaxReserved            = 0x7F
98 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
99
100 /* End of _DDK_NTDDSTOR_H and _WINIOCTL_H common declarations.
101  */
102 #endif
103 #ifdef _DDK_NTDDSTOR_H
104 /* Declarations specific to _DDK_NTDDSTOR_H alone.
105  */
106 _BEGIN_C_DECLS
107
108 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER  __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0304)
109 #define IOCTL_STORAGE_QUERY_PROPERTY           __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0500)
110
111 DEFINE_GUID( GUID_DEVINTERFACE_DISK,
112     0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
113   );
114 DEFINE_GUID( GUID_DEVINTERFACE_CDROM,
115     0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
116   );
117 DEFINE_GUID( GUID_DEVINTERFACE_PARTITION,
118     0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
119   );
120 DEFINE_GUID( GUID_DEVINTERFACE_TAPE,
121     0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
122   );
123 DEFINE_GUID( GUID_DEVINTERFACE_WRITEONCEDISK,
124     0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
125   );
126 DEFINE_GUID( GUID_DEVINTERFACE_VOLUME,
127     0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
128   );
129 DEFINE_GUID( GUID_DEVINTERFACE_MEDIUMCHANGER,
130     0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
131   );
132 DEFINE_GUID( GUID_DEVINTERFACE_FLOPPY,
133     0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
134   );
135 DEFINE_GUID( GUID_DEVINTERFACE_CDCHANGER,
136     0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
137   );
138 DEFINE_GUID( GUID_DEVINTERFACE_STORAGEPORT,
139     0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
140   );
141
142 typedef
143 enum _STORAGE_MEDIA_TYPE
144 { DDS_4mm               = 0x20,
145   MiniQic               = 0x21,
146   Travan                = 0x22,
147   QIC                   = 0x23,
148   MP_8mm                = 0x24,
149   AME_8mm               = 0x25,
150   AIT1_8mm              = 0x26,
151   DLT                   = 0x27,
152   NCTP                  = 0x28,
153   IBM_3480              = 0x29,
154   IBM_3490E             = 0x2A,
155   IBM_Magstar_3590      = 0x2B,
156   IBM_Magstar_MP        = 0x2C,
157   STK_DATA_D3           = 0x2D,
158   SONY_DTF              = 0x2E,
159   DV_6mm                = 0x2F,
160   DMI                   = 0x30,
161   SONY_D2               = 0x31,
162   CLEANER_CARTRIDGE     = 0x32,
163   CD_ROM                = 0x33,
164   CD_R                  = 0x34,
165   CD_RW                 = 0x35,
166   DVD_ROM               = 0x36,
167   DVD_R                 = 0x37,
168   DVD_RW                = 0x38,
169   MO_3_RW               = 0x39,
170   MO_5_WO               = 0x3A,
171   MO_5_RW               = 0x3B,
172   MO_5_LIMDOW           = 0x3C,
173   PC_5_WO               = 0x3D,
174   PC_5_RW               = 0x3E,
175   PD_5_RW               = 0x3F,
176   ABL_5_WO              = 0x40,
177   PINNACLE_APEX_5_RW    = 0x41,
178   SONY_12_WO            = 0x42,
179   PHILIPS_12_WO         = 0x43,
180   HITACHI_12_WO         = 0x44,
181   CYGNET_12_WO          = 0x45,
182   KODAK_14_WO           = 0x46,
183   MO_NFR_525            = 0x47,
184   NIKON_12_RW           = 0x48,
185   IOMEGA_ZIP            = 0x49,
186   IOMEGA_JAZ            = 0x4A,
187   SYQUEST_EZ135         = 0x4B,
188   SYQUEST_EZFLYER       = 0x4C,
189   SYQUEST_SYJET         = 0x4D,
190   AVATAR_F2             = 0x4E,
191   MP2_8mm               = 0x4F,
192   DST_S                 = 0x50,
193   DST_M                 = 0x51,
194   DST_L                 = 0x52,
195   VXATape_1             = 0x53,
196   VXATape_2             = 0x54,
197   STK_9840              = 0x55,
198   LTO_Ultrium           = 0x56,
199   LTO_Accelis           = 0x57,
200   DVD_RAM               = 0x58,
201   AIT_8mm               = 0x59,
202   ADR_1                 = 0x5A,
203   ADR_2                 = 0x5B
204 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
205
206
207 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants
208  */
209 #define MEDIA_ERASEABLE           0x00000001
210 #define MEDIA_WRITE_ONCE          0x00000002
211 #define MEDIA_READ_ONLY           0x00000004
212 #define MEDIA_READ_WRITE          0x00000008
213 #define MEDIA_WRITE_PROTECTED     0x00000100
214 #define MEDIA_CURRENTLY_MOUNTED   0x80000000
215
216 typedef struct _DEVICE_MEDIA_INFO
217 { union
218   { struct
219     { LARGE_INTEGER               Cylinders;
220       STORAGE_MEDIA_TYPE          MediaType;
221       ULONG                       TracksPerCylinder;
222       ULONG                       SectorsPerTrack;
223       ULONG                       BytesPerSector;
224       ULONG                       NumberMediaSides;
225       ULONG                       MediaCharacteristics;
226     }                           DiskInfo;
227     struct
228     { LARGE_INTEGER               Cylinders;
229       STORAGE_MEDIA_TYPE          MediaType;
230       ULONG                       TracksPerCylinder;
231       ULONG                       SectorsPerTrack;
232       ULONG                       BytesPerSector;
233       ULONG                       NumberMediaSides;
234       ULONG                       MediaCharacteristics;
235     }                           RemovableDiskInfo;
236     struct
237     { STORAGE_MEDIA_TYPE          MediaType;
238       ULONG                       MediaCharacteristics;
239       ULONG                       CurrentBlockSize;
240       STORAGE_BUS_TYPE            BusType;
241       union
242       { struct
243         { UCHAR                       MediumType;
244           UCHAR                       DensityCode;
245         }                           ScsiInformation;
246       }                           BusSpecificData;
247     }                           TapeInfo;
248   }                           DeviceSpecific;
249 } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
250
251 typedef
252 struct _GET_MEDIA_TYPES
253 { ULONG                 DeviceType;
254   ULONG                 MediaInfoCount;
255   DEVICE_MEDIA_INFO     MediaInfo[1];
256 } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
257
258 typedef
259 struct _STORAGE_ADAPTER_DESCRIPTOR
260 { ULONG                 Version;
261   ULONG                 Size;
262   ULONG                 MaximumTransferLength;
263   ULONG                 MaximumPhysicalPages;
264   ULONG                 AlignmentMask;
265   BOOLEAN               AdapterUsesPio;
266   BOOLEAN               AdapterScansDown;
267   BOOLEAN               CommandQueueing;
268   BOOLEAN               AcceleratedTransfer;
269   STORAGE_BUS_TYPE      BusType;
270   USHORT                BusMajorVersion;
271   USHORT                BusMinorVersion;
272 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
273
274 typedef
275 struct _STORAGE_BUS_RESET_REQUEST
276 { UCHAR                 PathId;
277 } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
278
279 typedef
280 struct _STORAGE_DESCRIPTOR_HEADER
281 { ULONG                 Version;
282   ULONG                 Size;
283 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
284
285 typedef
286 struct _STORAGE_DEVICE_DESCRIPTOR
287 { ULONG                 Version;
288   ULONG                 Size;
289   UCHAR                 DeviceType;
290   UCHAR                 DeviceTypeModifier;
291   BOOLEAN               RemovableMedia;
292   BOOLEAN               CommandQueueing;
293   ULONG                 VendorIdOffset;
294   ULONG                 ProductIdOffset;
295   ULONG                 ProductRevisionOffset;
296   ULONG                 SerialNumberOffset;
297   STORAGE_BUS_TYPE      BusType;
298   ULONG                 RawPropertiesLength;
299   UCHAR                 RawDeviceProperties[1];
300 } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
301
302 typedef
303 struct _STORAGE_DEVICE_ID_DESCRIPTOR
304 { ULONG                 Version;
305   ULONG                 Size;
306   ULONG                 NumberOfIdentifiers;
307   UCHAR                 Identifiers[1];
308 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
309
310 typedef
311 struct _STORAGE_DEVICE_NUMBER
312 { DEVICE_TYPE           DeviceType;
313   ULONG                 DeviceNumber;
314   ULONG                 PartitionNumber;
315 } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
316
317 typedef
318 struct _STORAGE_PREDICT_FAILURE
319 { ULONG                 PredictFailure;
320   UCHAR                 VendorSpecific[512];
321 } STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
322
323 typedef
324 enum _STORAGE_PROPERTY_ID
325 { StorageDeviceProperty         = 0,
326   StorageAdapterProperty        = 1,
327   StorageDeviceIdProperty       = 2
328 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
329
330 typedef
331 enum _STORAGE_QUERY_TYPE
332 { PropertyStandardQuery         = 0,
333   PropertyExistsQuery           = 1,
334   PropertyMaskQuery             = 2,
335   PropertyQueryMaxDefined       = 3
336 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
337
338 typedef
339 struct _STORAGE_PROPERTY_QUERY
340 { STORAGE_PROPERTY_ID   PropertyId;
341   STORAGE_QUERY_TYPE    QueryType;
342   UCHAR                 AdditionalParameters[1];
343 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
344
345 _END_C_DECLS
346
347 #endif  /* _DDK_NTDDSTOR_H */
348 #endif  /* !_DDK_NTDDSTOR_H: $RCSfile$: end of file */