4 * Storage class IOCTL interface.
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
27 #pragma GCC system_header
34 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
36 #define IOCTL_STORAGE_CHECK_VERIFY \
37 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
39 #define IOCTL_STORAGE_CHECK_VERIFY2 \
40 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
42 #define IOCTL_STORAGE_EJECT_MEDIA \
43 CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
45 #define IOCTL_STORAGE_EJECTION_CONTROL \
46 CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
48 #define IOCTL_STORAGE_FIND_NEW_DEVICES \
49 CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
51 #define IOCTL_STORAGE_GET_DEVICE_NUMBER \
52 CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
54 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
55 CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
57 #define IOCTL_STORAGE_GET_MEDIA_TYPES \
58 CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
60 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
61 CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
63 #define IOCTL_STORAGE_LOAD_MEDIA \
64 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
66 #define IOCTL_STORAGE_LOAD_MEDIA2 \
67 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
69 #define IOCTL_STORAGE_MCN_CONTROL \
70 CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
72 #define IOCTL_STORAGE_MEDIA_REMOVAL \
73 CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
75 #define IOCTL_STORAGE_PREDICT_FAILURE \
76 CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
78 #define IOCTL_STORAGE_QUERY_PROPERTY \
79 CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
81 #define IOCTL_STORAGE_RELEASE \
82 CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
84 #define IOCTL_STORAGE_RESERVE \
85 CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
87 #define IOCTL_STORAGE_RESET_BUS \
88 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
90 #define IOCTL_STORAGE_RESET_DEVICE \
91 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
94 DEFINE_GUID(GUID_DEVINTERFACE_DISK
,
95 0x53f56307L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
97 DEFINE_GUID(GUID_DEVINTERFACE_CDROM
,
98 0x53f56308L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
100 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION
,
101 0x53f5630aL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
103 DEFINE_GUID(GUID_DEVINTERFACE_TAPE
,
104 0x53f5630bL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
106 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK
,
107 0x53f5630cL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
109 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME
,
110 0x53f5630dL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
112 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER
,
113 0x53f56310L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
115 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY
,
116 0x53f56311L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
118 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER
,
119 0x53f56312L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
121 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT
,
122 0x2accfe60L
, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
125 typedef enum _STORAGE_MEDIA_TYPE
{
186 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
188 typedef enum _STORAGE_BUS_TYPE
{
189 BusTypeUnknown
= 0x00,
198 BusTypeMaxReserved
= 0x7F
199 } STORAGE_BUS_TYPE
, *PSTORAGE_BUS_TYPE
;
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
209 typedef struct _DEVICE_MEDIA_INFO
{
212 LARGE_INTEGER Cylinders
;
213 STORAGE_MEDIA_TYPE MediaType
;
214 ULONG TracksPerCylinder
;
215 ULONG SectorsPerTrack
;
216 ULONG BytesPerSector
;
217 ULONG NumberMediaSides
;
218 ULONG MediaCharacteristics
;
221 LARGE_INTEGER Cylinders
;
222 STORAGE_MEDIA_TYPE MediaType
;
223 ULONG TracksPerCylinder
;
224 ULONG SectorsPerTrack
;
225 ULONG BytesPerSector
;
226 ULONG NumberMediaSides
;
227 ULONG MediaCharacteristics
;
230 STORAGE_MEDIA_TYPE MediaType
;
231 ULONG MediaCharacteristics
;
232 ULONG CurrentBlockSize
;
233 STORAGE_BUS_TYPE BusType
;
242 } DEVICE_MEDIA_INFO
, *PDEVICE_MEDIA_INFO
;
244 typedef struct _GET_MEDIA_TYPES
{
246 ULONG MediaInfoCount
;
247 DEVICE_MEDIA_INFO MediaInfo
[1];
248 } GET_MEDIA_TYPES
, *PGET_MEDIA_TYPES
;
250 typedef struct _STORAGE_ADAPTER_DESCRIPTOR
{
253 ULONG MaximumTransferLength
;
254 ULONG MaximumPhysicalPages
;
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
;
265 typedef struct _STORAGE_BUS_RESET_REQUEST
{
267 } STORAGE_BUS_RESET_REQUEST
, *PSTORAGE_BUS_RESET_REQUEST
;
269 typedef struct _STORAGE_DESCRIPTOR_HEADER
{
272 } STORAGE_DESCRIPTOR_HEADER
, *PSTORAGE_DESCRIPTOR_HEADER
;
274 typedef struct _STORAGE_DEVICE_DESCRIPTOR
{
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
;
290 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR
{
293 ULONG NumberOfIdentifiers
;
294 UCHAR Identifiers
[1];
295 } STORAGE_DEVICE_ID_DESCRIPTOR
, *PSTORAGE_DEVICE_ID_DESCRIPTOR
;
297 typedef struct _STORAGE_DEVICE_NUMBER
{
298 DEVICE_TYPE DeviceType
;
300 ULONG PartitionNumber
;
301 } STORAGE_DEVICE_NUMBER
, *PSTORAGE_DEVICE_NUMBER
;
303 typedef struct _STORAGE_PREDICT_FAILURE
{
304 ULONG PredictFailure
;
305 UCHAR VendorSpecific
[512];
306 } STORAGE_PREDICT_FAILURE
, *PSTORAGE_PREDICT_FAILURE
;
308 typedef enum _STORAGE_PROPERTY_ID
{
309 StorageDeviceProperty
= 0,
310 StorageAdapterProperty
,
311 StorageDeviceIdProperty
312 } STORAGE_PROPERTY_ID
, *PSTORAGE_PROPERTY_ID
;
314 typedef enum _STORAGE_QUERY_TYPE
{
315 PropertyStandardQuery
= 0,
318 PropertyQueryMaxDefined
319 } STORAGE_QUERY_TYPE
, *PSTORAGE_QUERY_TYPE
;
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
;
331 #endif /* __NTDDSTOR_H */