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.
30 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
32 #define IOCTL_STORAGE_CHECK_VERIFY \
33 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
35 #define IOCTL_STORAGE_CHECK_VERIFY2 \
36 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
38 #define IOCTL_STORAGE_EJECT_MEDIA \
39 CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
41 #define IOCTL_STORAGE_EJECTION_CONTROL \
42 CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
44 #define IOCTL_STORAGE_FIND_NEW_DEVICES \
45 CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
47 #define IOCTL_STORAGE_GET_DEVICE_NUMBER \
48 CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
50 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
51 CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
53 #define IOCTL_STORAGE_GET_MEDIA_TYPES \
54 CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
56 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
57 CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
59 #define IOCTL_STORAGE_LOAD_MEDIA \
60 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
62 #define IOCTL_STORAGE_LOAD_MEDIA2 \
63 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
65 #define IOCTL_STORAGE_MCN_CONTROL \
66 CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
68 #define IOCTL_STORAGE_MEDIA_REMOVAL \
69 CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
71 #define IOCTL_STORAGE_PREDICT_FAILURE \
72 CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
74 #define IOCTL_STORAGE_QUERY_PROPERTY \
75 CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
77 #define IOCTL_STORAGE_RELEASE \
78 CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
80 #define IOCTL_STORAGE_RESERVE \
81 CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
83 #define IOCTL_STORAGE_GET_HOTPLUG_INFO \
84 CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
86 #define IOCTL_STORAGE_SET_HOTPLUG_INFO \
87 CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
89 #define IOCTL_STORAGE_RESET_BUS \
90 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
92 #define IOCTL_STORAGE_RESET_DEVICE \
93 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
96 DEFINE_GUID(GUID_DEVINTERFACE_DISK
,
97 0x53f56307L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
99 DEFINE_GUID(GUID_DEVINTERFACE_CDROM
,
100 0x53f56308L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
102 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION
,
103 0x53f5630aL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
105 DEFINE_GUID(GUID_DEVINTERFACE_TAPE
,
106 0x53f5630bL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
108 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK
,
109 0x53f5630cL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
111 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME
,
112 0x53f5630dL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
114 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER
,
115 0x53f56310L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
117 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY
,
118 0x53f56311L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
120 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER
,
121 0x53f56312L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
123 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT
,
124 0x2accfe60L
, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
126 DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME
,
127 0x7f108a28L
, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62);
129 /* Aliases for storage guids */
130 #define DiskClassGuid GUID_DEVINTERFACE_DISK
131 #define CdRomClassGuid GUID_DEVINTERFACE_CDROM
132 #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION
133 #define TapeClassGuid GUID_DEVINTERFACE_TAPE
134 #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK
135 #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME
136 #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER
137 #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY
138 #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER
139 #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT
140 #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME
142 typedef enum _STORAGE_MEDIA_TYPE
{
203 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
205 typedef enum _STORAGE_BUS_TYPE
{
206 BusTypeUnknown
= 0x00,
215 BusTypeMaxReserved
= 0x7F
216 } STORAGE_BUS_TYPE
, *PSTORAGE_BUS_TYPE
;
218 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
219 #define MEDIA_ERASEABLE 0x00000001
220 #define MEDIA_WRITE_ONCE 0x00000002
221 #define MEDIA_READ_ONLY 0x00000004
222 #define MEDIA_READ_WRITE 0x00000008
223 #define MEDIA_WRITE_PROTECTED 0x00000100
224 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
226 typedef struct _DEVICE_MEDIA_INFO
{
229 LARGE_INTEGER Cylinders
;
230 STORAGE_MEDIA_TYPE MediaType
;
231 ULONG TracksPerCylinder
;
232 ULONG SectorsPerTrack
;
233 ULONG BytesPerSector
;
234 ULONG NumberMediaSides
;
235 ULONG MediaCharacteristics
;
238 LARGE_INTEGER Cylinders
;
239 STORAGE_MEDIA_TYPE MediaType
;
240 ULONG TracksPerCylinder
;
241 ULONG SectorsPerTrack
;
242 ULONG BytesPerSector
;
243 ULONG NumberMediaSides
;
244 ULONG MediaCharacteristics
;
247 STORAGE_MEDIA_TYPE MediaType
;
248 ULONG MediaCharacteristics
;
249 ULONG CurrentBlockSize
;
250 STORAGE_BUS_TYPE BusType
;
259 } DEVICE_MEDIA_INFO
, *PDEVICE_MEDIA_INFO
;
261 typedef struct _GET_MEDIA_TYPES
{
263 ULONG MediaInfoCount
;
264 DEVICE_MEDIA_INFO MediaInfo
[1];
265 } GET_MEDIA_TYPES
, *PGET_MEDIA_TYPES
;
267 typedef struct _STORAGE_ADAPTER_DESCRIPTOR
{
270 ULONG MaximumTransferLength
;
271 ULONG MaximumPhysicalPages
;
273 BOOLEAN AdapterUsesPio
;
274 BOOLEAN AdapterScansDown
;
275 BOOLEAN CommandQueueing
;
276 BOOLEAN AcceleratedTransfer
;
277 STORAGE_BUS_TYPE BusType
;
278 USHORT BusMajorVersion
;
279 USHORT BusMinorVersion
;
280 } STORAGE_ADAPTER_DESCRIPTOR
, *PSTORAGE_ADAPTER_DESCRIPTOR
;
282 typedef struct _STORAGE_BUS_RESET_REQUEST
{
284 } STORAGE_BUS_RESET_REQUEST
, *PSTORAGE_BUS_RESET_REQUEST
;
286 typedef struct _STORAGE_DESCRIPTOR_HEADER
{
289 } STORAGE_DESCRIPTOR_HEADER
, *PSTORAGE_DESCRIPTOR_HEADER
;
291 typedef struct _STORAGE_DEVICE_DESCRIPTOR
{
295 UCHAR DeviceTypeModifier
;
296 BOOLEAN RemovableMedia
;
297 BOOLEAN CommandQueueing
;
298 ULONG VendorIdOffset
;
299 ULONG ProductIdOffset
;
300 ULONG ProductRevisionOffset
;
301 ULONG SerialNumberOffset
;
302 STORAGE_BUS_TYPE BusType
;
303 ULONG RawPropertiesLength
;
304 UCHAR RawDeviceProperties
[1];
305 } STORAGE_DEVICE_DESCRIPTOR
, *PSTORAGE_DEVICE_DESCRIPTOR
;
307 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR
{
310 ULONG NumberOfIdentifiers
;
311 UCHAR Identifiers
[1];
312 } STORAGE_DEVICE_ID_DESCRIPTOR
, *PSTORAGE_DEVICE_ID_DESCRIPTOR
;
314 typedef struct _STORAGE_DEVICE_NUMBER
{
315 DEVICE_TYPE DeviceType
;
317 ULONG PartitionNumber
;
318 } STORAGE_DEVICE_NUMBER
, *PSTORAGE_DEVICE_NUMBER
;
320 typedef struct _STORAGE_PREDICT_FAILURE
{
321 ULONG PredictFailure
;
322 UCHAR VendorSpecific
[512];
323 } STORAGE_PREDICT_FAILURE
, *PSTORAGE_PREDICT_FAILURE
;
325 typedef enum _STORAGE_PROPERTY_ID
{
326 StorageDeviceProperty
= 0,
327 StorageAdapterProperty
,
328 StorageDeviceIdProperty
,
329 StorageDeviceUniqueIdProperty
,
330 StorageDeviceWriteCacheProperty
,
331 StorageMiniportProperty
,
332 StorageAccessAlignmentProperty
333 } STORAGE_PROPERTY_ID
, *PSTORAGE_PROPERTY_ID
;
335 typedef enum _STORAGE_QUERY_TYPE
{
336 PropertyStandardQuery
= 0,
339 PropertyQueryMaxDefined
340 } STORAGE_QUERY_TYPE
, *PSTORAGE_QUERY_TYPE
;
342 typedef struct _STORAGE_PROPERTY_QUERY
{
343 STORAGE_PROPERTY_ID PropertyId
;
344 STORAGE_QUERY_TYPE QueryType
;
345 UCHAR AdditionalParameters
[1];
346 } STORAGE_PROPERTY_QUERY
, *PSTORAGE_PROPERTY_QUERY
;
348 typedef struct _PREVENT_MEDIA_REMOVAL
{
349 BOOLEAN PreventMediaRemoval
;
350 } PREVENT_MEDIA_REMOVAL
, *PPREVENT_MEDIA_REMOVAL
;
356 #endif /* __NTDDSTOR_H */