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_GET_HOTPLUG_INFO \
88 CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
90 #define IOCTL_STORAGE_SET_HOTPLUG_INFO \
91 CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
93 #define IOCTL_STORAGE_RESET_BUS \
94 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
96 #define IOCTL_STORAGE_RESET_DEVICE \
97 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
100 DEFINE_GUID(GUID_DEVINTERFACE_DISK
,
101 0x53f56307L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
103 DEFINE_GUID(GUID_DEVINTERFACE_CDROM
,
104 0x53f56308L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
106 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION
,
107 0x53f5630aL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
109 DEFINE_GUID(GUID_DEVINTERFACE_TAPE
,
110 0x53f5630bL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
112 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK
,
113 0x53f5630cL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
115 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME
,
116 0x53f5630dL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
118 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER
,
119 0x53f56310L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
121 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY
,
122 0x53f56311L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
124 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER
,
125 0x53f56312L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
127 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT
,
128 0x2accfe60L
, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
130 DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME
,
131 0x7f108a28L
, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62);
133 /* Aliases for storage guids */
134 #define DiskClassGuid GUID_DEVINTERFACE_DISK
135 #define CdRomClassGuid GUID_DEVINTERFACE_CDROM
136 #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION
137 #define TapeClassGuid GUID_DEVINTERFACE_TAPE
138 #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK
139 #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME
140 #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER
141 #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY
142 #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER
143 #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT
144 #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME
146 typedef enum _STORAGE_MEDIA_TYPE
{
207 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
209 typedef enum _STORAGE_BUS_TYPE
{
210 BusTypeUnknown
= 0x00,
219 BusTypeMaxReserved
= 0x7F
220 } STORAGE_BUS_TYPE
, *PSTORAGE_BUS_TYPE
;
222 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
223 #define MEDIA_ERASEABLE 0x00000001
224 #define MEDIA_WRITE_ONCE 0x00000002
225 #define MEDIA_READ_ONLY 0x00000004
226 #define MEDIA_READ_WRITE 0x00000008
227 #define MEDIA_WRITE_PROTECTED 0x00000100
228 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
230 typedef struct _DEVICE_MEDIA_INFO
{
233 LARGE_INTEGER Cylinders
;
234 STORAGE_MEDIA_TYPE MediaType
;
235 ULONG TracksPerCylinder
;
236 ULONG SectorsPerTrack
;
237 ULONG BytesPerSector
;
238 ULONG NumberMediaSides
;
239 ULONG MediaCharacteristics
;
242 LARGE_INTEGER Cylinders
;
243 STORAGE_MEDIA_TYPE MediaType
;
244 ULONG TracksPerCylinder
;
245 ULONG SectorsPerTrack
;
246 ULONG BytesPerSector
;
247 ULONG NumberMediaSides
;
248 ULONG MediaCharacteristics
;
251 STORAGE_MEDIA_TYPE MediaType
;
252 ULONG MediaCharacteristics
;
253 ULONG CurrentBlockSize
;
254 STORAGE_BUS_TYPE BusType
;
263 } DEVICE_MEDIA_INFO
, *PDEVICE_MEDIA_INFO
;
265 typedef struct _GET_MEDIA_TYPES
{
267 ULONG MediaInfoCount
;
268 DEVICE_MEDIA_INFO MediaInfo
[1];
269 } GET_MEDIA_TYPES
, *PGET_MEDIA_TYPES
;
271 typedef struct _STORAGE_ADAPTER_DESCRIPTOR
{
274 ULONG MaximumTransferLength
;
275 ULONG MaximumPhysicalPages
;
277 BOOLEAN AdapterUsesPio
;
278 BOOLEAN AdapterScansDown
;
279 BOOLEAN CommandQueueing
;
280 BOOLEAN AcceleratedTransfer
;
281 STORAGE_BUS_TYPE BusType
;
282 USHORT BusMajorVersion
;
283 USHORT BusMinorVersion
;
284 } STORAGE_ADAPTER_DESCRIPTOR
, *PSTORAGE_ADAPTER_DESCRIPTOR
;
286 typedef struct _STORAGE_BUS_RESET_REQUEST
{
288 } STORAGE_BUS_RESET_REQUEST
, *PSTORAGE_BUS_RESET_REQUEST
;
290 typedef struct _STORAGE_DESCRIPTOR_HEADER
{
293 } STORAGE_DESCRIPTOR_HEADER
, *PSTORAGE_DESCRIPTOR_HEADER
;
295 typedef struct _STORAGE_DEVICE_DESCRIPTOR
{
299 UCHAR DeviceTypeModifier
;
300 BOOLEAN RemovableMedia
;
301 BOOLEAN CommandQueueing
;
302 ULONG VendorIdOffset
;
303 ULONG ProductIdOffset
;
304 ULONG ProductRevisionOffset
;
305 ULONG SerialNumberOffset
;
306 STORAGE_BUS_TYPE BusType
;
307 ULONG RawPropertiesLength
;
308 UCHAR RawDeviceProperties
[1];
309 } STORAGE_DEVICE_DESCRIPTOR
, *PSTORAGE_DEVICE_DESCRIPTOR
;
311 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR
{
314 ULONG NumberOfIdentifiers
;
315 UCHAR Identifiers
[1];
316 } STORAGE_DEVICE_ID_DESCRIPTOR
, *PSTORAGE_DEVICE_ID_DESCRIPTOR
;
318 typedef struct _STORAGE_DEVICE_NUMBER
{
319 DEVICE_TYPE DeviceType
;
321 ULONG PartitionNumber
;
322 } STORAGE_DEVICE_NUMBER
, *PSTORAGE_DEVICE_NUMBER
;
324 typedef struct _STORAGE_PREDICT_FAILURE
{
325 ULONG PredictFailure
;
326 UCHAR VendorSpecific
[512];
327 } STORAGE_PREDICT_FAILURE
, *PSTORAGE_PREDICT_FAILURE
;
329 typedef enum _STORAGE_PROPERTY_ID
{
330 StorageDeviceProperty
= 0,
331 StorageAdapterProperty
,
332 StorageDeviceIdProperty
,
333 StorageDeviceUniqueIdProperty
,
334 StorageDeviceWriteCacheProperty
,
335 StorageMiniportProperty
,
336 StorageAccessAlignmentProperty
337 } STORAGE_PROPERTY_ID
, *PSTORAGE_PROPERTY_ID
;
339 typedef enum _STORAGE_QUERY_TYPE
{
340 PropertyStandardQuery
= 0,
343 PropertyQueryMaxDefined
344 } STORAGE_QUERY_TYPE
, *PSTORAGE_QUERY_TYPE
;
346 typedef struct _STORAGE_PROPERTY_QUERY
{
347 STORAGE_PROPERTY_ID PropertyId
;
348 STORAGE_QUERY_TYPE QueryType
;
349 UCHAR AdditionalParameters
[1];
350 } STORAGE_PROPERTY_QUERY
, *PSTORAGE_PROPERTY_QUERY
;
352 typedef struct _PREVENT_MEDIA_REMOVAL
{
353 BOOLEAN PreventMediaRemoval
;
354 } PREVENT_MEDIA_REMOVAL
, *PPREVENT_MEDIA_REMOVAL
;
360 #endif /* __NTDDSTOR_H */