4 * Windows Device Driver Kit -- storage class IOCTL interface.
8 * Written by Casper S. Hornstrup <chorns@users.sourceforge.net>
9 * Copyright (C) 2002, 2004, 2015, 2016, MinGW.org Project.
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:
19 * The above copyright notice, this permission notice, and the following
20 * disclaimer shall be included in all copies or substantial portions of
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.
32 #ifndef _DDK_NTDDSTOR_H
33 #pragma GCC system_header
35 /* This file supports partial inclusion by <winioctl.h>; defer definition
36 * of its normal repeat inclusion guard macro...
38 #ifndef __WINIOCTL_H_SOURCED__
39 /* ...until we've ascertained that this is NOT such partial inclusion.
41 #define _DDK_NTDDSTOR_H
43 /* In case of full inclusion, we must also include the full content of:
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.
55 #define __IOCTL_STORAGE_(FN,M,A) CTL_CODE(IOCTL_STORAGE_BASE,(FN),(M),(A))
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)
77 enum _STORAGE_BUS_TYPE
78 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff566356(v=vs.85).aspx */
79 { BusTypeUnknown = 0x00,
93 BusTypeVirtual = 0x0E,
94 BusTypeFileBackedVirtual = 0x0F,
96 BusTypeMax /* variant; number of bus types */,
97 BusTypeMaxReserved = 0x7F
98 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
100 /* End of _DDK_NTDDSTOR_H and _WINIOCTL_H common declarations.
103 #ifdef _DDK_NTDDSTOR_H
104 /* Declarations specific to _DDK_NTDDSTOR_H alone.
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)
111 DEFINE_GUID( GUID_DEVINTERFACE_DISK,
112 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
114 DEFINE_GUID( GUID_DEVINTERFACE_CDROM,
115 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
117 DEFINE_GUID( GUID_DEVINTERFACE_PARTITION,
118 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
120 DEFINE_GUID( GUID_DEVINTERFACE_TAPE,
121 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
123 DEFINE_GUID( GUID_DEVINTERFACE_WRITEONCEDISK,
124 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
126 DEFINE_GUID( GUID_DEVINTERFACE_VOLUME,
127 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
129 DEFINE_GUID( GUID_DEVINTERFACE_MEDIUMCHANGER,
130 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
132 DEFINE_GUID( GUID_DEVINTERFACE_FLOPPY,
133 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
135 DEFINE_GUID( GUID_DEVINTERFACE_CDCHANGER,
136 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
138 DEFINE_GUID( GUID_DEVINTERFACE_STORAGEPORT,
139 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
143 enum _STORAGE_MEDIA_TYPE
155 IBM_Magstar_3590 = 0x2B,
156 IBM_Magstar_MP = 0x2C,
162 CLEANER_CARTRIDGE = 0x32,
177 PINNACLE_APEX_5_RW = 0x41,
179 PHILIPS_12_WO = 0x43,
180 HITACHI_12_WO = 0x44,
187 SYQUEST_EZ135 = 0x4B,
188 SYQUEST_EZFLYER = 0x4C,
189 SYQUEST_SYJET = 0x4D,
204 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
207 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants
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
216 typedef struct _DEVICE_MEDIA_INFO
219 { LARGE_INTEGER Cylinders;
220 STORAGE_MEDIA_TYPE MediaType;
221 ULONG TracksPerCylinder;
222 ULONG SectorsPerTrack;
223 ULONG BytesPerSector;
224 ULONG NumberMediaSides;
225 ULONG MediaCharacteristics;
228 { LARGE_INTEGER Cylinders;
229 STORAGE_MEDIA_TYPE MediaType;
230 ULONG TracksPerCylinder;
231 ULONG SectorsPerTrack;
232 ULONG BytesPerSector;
233 ULONG NumberMediaSides;
234 ULONG MediaCharacteristics;
237 { STORAGE_MEDIA_TYPE MediaType;
238 ULONG MediaCharacteristics;
239 ULONG CurrentBlockSize;
240 STORAGE_BUS_TYPE BusType;
249 } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
252 struct _GET_MEDIA_TYPES
254 ULONG MediaInfoCount;
255 DEVICE_MEDIA_INFO MediaInfo[1];
256 } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
259 struct _STORAGE_ADAPTER_DESCRIPTOR
262 ULONG MaximumTransferLength;
263 ULONG MaximumPhysicalPages;
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;
275 struct _STORAGE_BUS_RESET_REQUEST
277 } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
280 struct _STORAGE_DESCRIPTOR_HEADER
283 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
286 struct _STORAGE_DEVICE_DESCRIPTOR
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;
303 struct _STORAGE_DEVICE_ID_DESCRIPTOR
306 ULONG NumberOfIdentifiers;
307 UCHAR Identifiers[1];
308 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
311 struct _STORAGE_DEVICE_NUMBER
312 { DEVICE_TYPE DeviceType;
314 ULONG PartitionNumber;
315 } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
318 struct _STORAGE_PREDICT_FAILURE
319 { ULONG PredictFailure;
320 UCHAR VendorSpecific[512];
321 } STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
324 enum _STORAGE_PROPERTY_ID
325 { StorageDeviceProperty = 0,
326 StorageAdapterProperty = 1,
327 StorageDeviceIdProperty = 2
328 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
331 enum _STORAGE_QUERY_TYPE
332 { PropertyStandardQuery = 0,
333 PropertyExistsQuery = 1,
334 PropertyMaskQuery = 2,
335 PropertyQueryMaxDefined = 3
336 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
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;
347 #endif /* _DDK_NTDDSTOR_H */
348 #endif /* !_DDK_NTDDSTOR_H: $RCSfile$: end of file */