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 #if defined(DEFINE_GUID)
32 DEFINE_GUID(GUID_DEVINTERFACE_DISK
,
33 0x53f56307L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
35 DEFINE_GUID(GUID_DEVINTERFACE_CDROM
,
36 0x53f56308L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
38 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION
,
39 0x53f5630aL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
41 DEFINE_GUID(GUID_DEVINTERFACE_TAPE
,
42 0x53f5630bL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
44 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK
,
45 0x53f5630cL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
47 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME
,
48 0x53f5630dL
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
50 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER
,
51 0x53f56310L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
53 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY
,
54 0x53f56311L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
56 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER
,
57 0x53f56312L
, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
59 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT
,
60 0x2accfe60L
, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
62 DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME
,
63 0x7f108a28L
, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62);
65 #define WDI_STORAGE_PREDICT_FAILURE_DPS_GUID \
66 {0xe9f2d03aL, 0x747c, 0x41c2, {0xbb, 0x9a, 0x02, 0xc6, 0x2b, 0x6d, 0x5f, 0xcb}};
68 /* Aliases for storage guids */
69 #define DiskClassGuid GUID_DEVINTERFACE_DISK
70 #define CdRomClassGuid GUID_DEVINTERFACE_CDROM
71 #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION
72 #define TapeClassGuid GUID_DEVINTERFACE_TAPE
73 #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK
74 #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME
75 #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER
76 #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY
77 #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER
78 #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT
79 #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME
81 #endif /* defined(DEFINE_GUID) */
85 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
87 #define IOCTL_STORAGE_CHECK_VERIFY \
88 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
90 #define IOCTL_STORAGE_CHECK_VERIFY2 \
91 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
93 #define IOCTL_STORAGE_MEDIA_REMOVAL \
94 CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
96 #define IOCTL_STORAGE_EJECT_MEDIA \
97 CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
99 #define IOCTL_STORAGE_LOAD_MEDIA \
100 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
102 #define IOCTL_STORAGE_LOAD_MEDIA2 \
103 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
105 #define IOCTL_STORAGE_RESERVE \
106 CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
108 #define IOCTL_STORAGE_RELEASE \
109 CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
111 #define IOCTL_STORAGE_FIND_NEW_DEVICES \
112 CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
114 #define IOCTL_STORAGE_EJECTION_CONTROL \
115 CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
117 #define IOCTL_STORAGE_MCN_CONTROL \
118 CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
120 #define IOCTL_STORAGE_GET_MEDIA_TYPES \
121 CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
123 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
124 CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
126 #define IOCTL_STORAGE_RESET_BUS \
127 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
129 #define IOCTL_STORAGE_RESET_DEVICE \
130 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
132 #define IOCTL_STORAGE_GET_DEVICE_NUMBER \
133 CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
135 #define IOCTL_STORAGE_PREDICT_FAILURE \
136 CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
138 #endif /* _WINIOCTL_ */
140 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
141 CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
143 #define IOCTL_STORAGE_GET_HOTPLUG_INFO \
144 CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
146 #define IOCTL_STORAGE_SET_HOTPLUG_INFO \
147 CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
149 #define OBSOLETE_IOCTL_STORAGE_RESET_BUS \
150 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
152 #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE \
153 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
155 #define IOCTL_STORAGE_BREAK_RESERVATION \
156 CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
158 #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN \
159 CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS)
161 #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT \
162 CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
164 #define IOCTL_STORAGE_READ_CAPACITY \
165 CTL_CODE(IOCTL_STORAGE_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
167 #define IOCTL_STORAGE_QUERY_PROPERTY \
168 CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
170 #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES \
171 CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS)
173 #define IOCTL_STORAGE_GET_BC_PROPERTIES \
174 CTL_CODE(IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS)
176 #define IOCTL_STORAGE_ALLOCATE_BC_STREAM \
177 CTL_CODE(IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
179 #define IOCTL_STORAGE_FREE_BC_STREAM \
180 CTL_CODE(IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
182 #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT \
183 CTL_CODE(IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS)
185 #define RECOVERED_WRITES_VALID 0x00000001
186 #define UNRECOVERED_WRITES_VALID 0x00000002
187 #define RECOVERED_READS_VALID 0x00000004
188 #define UNRECOVERED_READS_VALID 0x00000008
189 #define WRITE_COMPRESSION_INFO_VALID 0x00000010
190 #define READ_COMPRESSION_INFO_VALID 0x00000020
192 #define TAPE_RETURN_STATISTICS 0L
193 #define TAPE_RETURN_ENV_INFO 1L
194 #define TAPE_RESET_STATISTICS 2L
196 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
197 #define MEDIA_ERASEABLE 0x00000001
198 #define MEDIA_WRITE_ONCE 0x00000002
199 #define MEDIA_READ_ONLY 0x00000004
200 #define MEDIA_READ_WRITE 0x00000008
201 #define MEDIA_WRITE_PROTECTED 0x00000100
202 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
204 #define StorageIdTypeNAA StorageIdTypeFCPHName
206 #define DeviceDsmActionFlag_NonDestructive 0x80000000
208 #define IsDsmActionNonDestructive(_Action) ((BOOLEAN)((_Action & DeviceDsmActionFlag_NonDestructive) != 0))
210 #define DeviceDsmAction_None 0
211 #define DeviceDsmAction_Trim 1
212 #define DeviceDsmAction_Notification (2 | DeviceDsmActionFlag_NonDestructive)
214 #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE 0x00000001
216 #define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001
217 #define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002
219 #define IOCTL_STORAGE_BC_VERSION 1
221 #define STORAGE_PRIORITY_HINT_SUPPORTED 0x0001
223 typedef struct _STORAGE_HOTPLUG_INFO
{
225 BOOLEAN MediaRemovable
;
226 BOOLEAN MediaHotplug
;
227 BOOLEAN DeviceHotplug
;
228 BOOLEAN WriteCacheEnableOverride
;
229 } STORAGE_HOTPLUG_INFO
, *PSTORAGE_HOTPLUG_INFO
;
231 typedef struct _STORAGE_DEVICE_NUMBER
{
232 DEVICE_TYPE DeviceType
;
234 ULONG PartitionNumber
;
235 } STORAGE_DEVICE_NUMBER
, *PSTORAGE_DEVICE_NUMBER
;
237 typedef struct _STORAGE_BUS_RESET_REQUEST
{
239 } STORAGE_BUS_RESET_REQUEST
, *PSTORAGE_BUS_RESET_REQUEST
;
241 typedef struct _STORAGE_BREAK_RESERVATION_REQUEST
{
247 } STORAGE_BREAK_RESERVATION_REQUEST
, *PSTORAGE_BREAK_RESERVATION_REQUEST
;
250 typedef struct _PREVENT_MEDIA_REMOVAL
{
251 BOOLEAN PreventMediaRemoval
;
252 } PREVENT_MEDIA_REMOVAL
, *PPREVENT_MEDIA_REMOVAL
;
255 typedef struct _CLASS_MEDIA_CHANGE_CONTEXT
{
256 ULONG MediaChangeCount
;
258 } CLASS_MEDIA_CHANGE_CONTEXT
, *PCLASS_MEDIA_CHANGE_CONTEXT
;
260 typedef struct _TAPE_STATISTICS
{
263 LARGE_INTEGER RecoveredWrites
;
264 LARGE_INTEGER UnrecoveredWrites
;
265 LARGE_INTEGER RecoveredReads
;
266 LARGE_INTEGER UnrecoveredReads
;
267 UCHAR CompressionRatioReads
;
268 UCHAR CompressionRatioWrites
;
269 } TAPE_STATISTICS
, *PTAPE_STATISTICS
;
271 typedef struct _TAPE_GET_STATISTICS
{
273 } TAPE_GET_STATISTICS
, *PTAPE_GET_STATISTICS
;
275 typedef enum _STORAGE_MEDIA_TYPE
{
329 #if (NTDDI_VERSION < NTDDI_WINXP)
343 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
345 typedef enum _STORAGE_BUS_TYPE
{
346 BusTypeUnknown
= 0x00,
361 BusTypeFileBackedVirtual
,
363 BusTypeMaxReserved
= 0x7F
364 } STORAGE_BUS_TYPE
, *PSTORAGE_BUS_TYPE
;
366 typedef struct _DEVICE_MEDIA_INFO
{
369 LARGE_INTEGER Cylinders
;
370 STORAGE_MEDIA_TYPE MediaType
;
371 ULONG TracksPerCylinder
;
372 ULONG SectorsPerTrack
;
373 ULONG BytesPerSector
;
374 ULONG NumberMediaSides
;
375 ULONG MediaCharacteristics
;
378 LARGE_INTEGER Cylinders
;
379 STORAGE_MEDIA_TYPE MediaType
;
380 ULONG TracksPerCylinder
;
381 ULONG SectorsPerTrack
;
382 ULONG BytesPerSector
;
383 ULONG NumberMediaSides
;
384 ULONG MediaCharacteristics
;
387 STORAGE_MEDIA_TYPE MediaType
;
388 ULONG MediaCharacteristics
;
389 ULONG CurrentBlockSize
;
390 STORAGE_BUS_TYPE BusType
;
399 } DEVICE_MEDIA_INFO
, *PDEVICE_MEDIA_INFO
;
401 typedef struct _GET_MEDIA_TYPES
{
403 ULONG MediaInfoCount
;
404 DEVICE_MEDIA_INFO MediaInfo
[1];
405 } GET_MEDIA_TYPES
, *PGET_MEDIA_TYPES
;
407 typedef struct _STORAGE_PREDICT_FAILURE
{
408 ULONG PredictFailure
;
409 UCHAR VendorSpecific
[512];
410 } STORAGE_PREDICT_FAILURE
, *PSTORAGE_PREDICT_FAILURE
;
412 typedef enum _STORAGE_QUERY_TYPE
{
413 PropertyStandardQuery
= 0,
416 PropertyQueryMaxDefined
417 } STORAGE_QUERY_TYPE
, *PSTORAGE_QUERY_TYPE
;
419 typedef enum _STORAGE_PROPERTY_ID
{
420 StorageDeviceProperty
= 0,
421 StorageAdapterProperty
,
422 StorageDeviceIdProperty
,
423 StorageDeviceUniqueIdProperty
,
424 StorageDeviceWriteCacheProperty
,
425 StorageMiniportProperty
,
426 StorageAccessAlignmentProperty
,
427 StorageDeviceSeekPenaltyProperty
,
428 StorageDeviceTrimProperty
,
429 StorageDeviceWriteAggregationProperty
430 } STORAGE_PROPERTY_ID
, *PSTORAGE_PROPERTY_ID
;
432 typedef struct _STORAGE_PROPERTY_QUERY
{
433 STORAGE_PROPERTY_ID PropertyId
;
434 STORAGE_QUERY_TYPE QueryType
;
435 UCHAR AdditionalParameters
[1];
436 } STORAGE_PROPERTY_QUERY
, *PSTORAGE_PROPERTY_QUERY
;
438 typedef _Struct_size_bytes_(Size
) struct _STORAGE_DESCRIPTOR_HEADER
{
441 } STORAGE_DESCRIPTOR_HEADER
, *PSTORAGE_DESCRIPTOR_HEADER
;
443 typedef _Struct_size_bytes_(Size
) struct _STORAGE_DEVICE_DESCRIPTOR
{
447 UCHAR DeviceTypeModifier
;
448 BOOLEAN RemovableMedia
;
449 BOOLEAN CommandQueueing
;
450 ULONG VendorIdOffset
;
451 ULONG ProductIdOffset
;
452 ULONG ProductRevisionOffset
;
453 ULONG SerialNumberOffset
;
454 STORAGE_BUS_TYPE BusType
;
455 ULONG RawPropertiesLength
;
456 UCHAR RawDeviceProperties
[1];
457 } STORAGE_DEVICE_DESCRIPTOR
, *PSTORAGE_DEVICE_DESCRIPTOR
;
459 typedef _Struct_size_bytes_(Size
) struct _STORAGE_ADAPTER_DESCRIPTOR
{
462 ULONG MaximumTransferLength
;
463 ULONG MaximumPhysicalPages
;
465 BOOLEAN AdapterUsesPio
;
466 BOOLEAN AdapterScansDown
;
467 BOOLEAN CommandQueueing
;
468 BOOLEAN AcceleratedTransfer
;
469 #if (NTDDI_VERSION < NTDDI_WINXP)
474 USHORT BusMajorVersion
;
475 USHORT BusMinorVersion
;
476 } STORAGE_ADAPTER_DESCRIPTOR
, *PSTORAGE_ADAPTER_DESCRIPTOR
;
478 typedef _Struct_size_bytes_(Size
) struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
{
481 ULONG BytesPerCacheLine
;
482 ULONG BytesOffsetForCacheAlignment
;
483 ULONG BytesPerLogicalSector
;
484 ULONG BytesPerPhysicalSector
;
485 ULONG BytesOffsetForSectorAlignment
;
486 } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
;
488 typedef enum _STORAGE_PORT_CODE_SET
{
489 StoragePortCodeSetReserved
= 0,
490 StoragePortCodeSetStorport
= 1,
491 StoragePortCodeSetSCSIport
= 2
492 } STORAGE_PORT_CODE_SET
, *PSTORAGE_PORT_CODE_SET
;
494 typedef struct _STORAGE_MINIPORT_DESCRIPTOR
{
497 STORAGE_PORT_CODE_SET Portdriver
;
498 BOOLEAN LUNResetSupported
;
499 BOOLEAN TargetResetSupported
;
500 } STORAGE_MINIPORT_DESCRIPTOR
, *PSTORAGE_MINIPORT_DESCRIPTOR
;
502 typedef enum _STORAGE_IDENTIFIER_CODE_SET
{
503 StorageIdCodeSetReserved
= 0,
504 StorageIdCodeSetBinary
= 1,
505 StorageIdCodeSetAscii
= 2,
506 StorageIdCodeSetUtf8
= 3
507 } STORAGE_IDENTIFIER_CODE_SET
, *PSTORAGE_IDENTIFIER_CODE_SET
;
509 typedef enum _STORAGE_IDENTIFIER_TYPE
{
510 StorageIdTypeVendorSpecific
= 0,
511 StorageIdTypeVendorId
= 1,
512 StorageIdTypeEUI64
= 2,
513 StorageIdTypeFCPHName
= 3,
514 StorageIdTypePortRelative
= 4,
515 StorageIdTypeTargetPortGroup
= 5,
516 StorageIdTypeLogicalUnitGroup
= 6,
517 StorageIdTypeMD5LogicalUnitIdentifier
= 7,
518 StorageIdTypeScsiNameString
= 8
519 } STORAGE_IDENTIFIER_TYPE
, *PSTORAGE_IDENTIFIER_TYPE
;
521 typedef enum _STORAGE_ID_NAA_FORMAT
{
522 StorageIdNAAFormatIEEEExtended
= 2,
523 StorageIdNAAFormatIEEERegistered
= 3,
524 StorageIdNAAFormatIEEEERegisteredExtended
= 5
525 } STORAGE_ID_NAA_FORMAT
, *PSTORAGE_ID_NAA_FORMAT
;
527 typedef enum _STORAGE_ASSOCIATION_TYPE
{
528 StorageIdAssocDevice
= 0,
529 StorageIdAssocPort
= 1,
530 StorageIdAssocTarget
= 2
531 } STORAGE_ASSOCIATION_TYPE
, *PSTORAGE_ASSOCIATION_TYPE
;
533 typedef struct _STORAGE_IDENTIFIER
{
534 STORAGE_IDENTIFIER_CODE_SET CodeSet
;
535 STORAGE_IDENTIFIER_TYPE Type
;
536 USHORT IdentifierSize
;
538 STORAGE_ASSOCIATION_TYPE Association
;
540 } STORAGE_IDENTIFIER
, *PSTORAGE_IDENTIFIER
;
542 typedef _Struct_size_bytes_(Size
) struct _STORAGE_DEVICE_ID_DESCRIPTOR
{
545 ULONG NumberOfIdentifiers
;
546 UCHAR Identifiers
[1];
547 } STORAGE_DEVICE_ID_DESCRIPTOR
, *PSTORAGE_DEVICE_ID_DESCRIPTOR
;
549 typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR
{
552 BOOLEAN IncursSeekPenalty
;
553 } DEVICE_SEEK_PENALTY_DESCRIPTOR
, *PDEVICE_SEEK_PENALTY_DESCRIPTOR
;
555 typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR
{
558 BOOLEAN BenefitsFromWriteAggregation
;
559 } DEVICE_WRITE_AGGREGATION_DESCRIPTOR
, *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR
;
561 typedef struct _DEVICE_TRIM_DESCRIPTOR
{
565 } DEVICE_TRIM_DESCRIPTOR
, *PDEVICE_TRIM_DESCRIPTOR
;
567 typedef ULONG DEVICE_DATA_MANAGEMENT_SET_ACTION
;
569 typedef struct _DEVICE_DATA_SET_RANGE
{
570 LONGLONG StartingOffset
;
571 ULONGLONG LengthInBytes
;
572 } DEVICE_DATA_SET_RANGE
, *PDEVICE_DATA_SET_RANGE
;
574 typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES
{
576 DEVICE_DATA_MANAGEMENT_SET_ACTION Action
;
578 ULONG ParameterBlockOffset
;
579 ULONG ParameterBlockLength
;
580 ULONG DataSetRangesOffset
;
581 ULONG DataSetRangesLength
;
582 } DEVICE_MANAGE_DATA_SET_ATTRIBUTES
, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES
;
584 typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS
{
587 ULONG NumFileTypeIDs
;
589 } DEVICE_DSM_NOTIFICATION_PARAMETERS
, *PDEVICE_DSM_NOTIFICATION_PARAMETERS
;
591 typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT
{
592 ULONG MaximumRequestsPerPeriod
;
594 ULONGLONG MaximumRequestSize
;
595 ULONG EstimatedTimePerRequest
;
596 ULONG NumOutStandingRequests
;
597 ULONGLONG RequestSize
;
598 } STORAGE_GET_BC_PROPERTIES_OUTPUT
, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT
;
600 typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT
{
602 ULONG RequestsPerPeriod
;
604 BOOLEAN RetryFailures
;
606 BOOLEAN Reserved1
[2];
609 } STORAGE_ALLOCATE_BC_STREAM_INPUT
, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT
;
611 typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT
{
612 ULONGLONG RequestSize
;
613 ULONG NumOutStandingRequests
;
614 } STORAGE_ALLOCATE_BC_STREAM_OUTPUT
, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT
;
616 typedef struct _STORAGE_PRIORITY_HINT_SUPPORT
{
618 } STORAGE_PRIORITY_HINT_SUPPORT
, *PSTORAGE_PRIORITY_HINT_SUPPORT
;
621 #pragma warning(push)
622 #pragma warning(disable:4200)
625 #if defined(_MSC_EXTENSIONS)
627 typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA
{
629 USHORT SerialNumberLength
;
630 UCHAR SerialNumber
[0];
631 } STORAGE_MEDIA_SERIAL_NUMBER_DATA
, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA
;
633 typedef struct _PERSISTENT_RESERVE_COMMAND
{
636 __MINGW_EXTENSION
union {
638 UCHAR ServiceAction
:5;
640 USHORT AllocationLength
;
643 UCHAR ServiceAction
:5;
647 UCHAR ParameterList
[0];
650 } PERSISTENT_RESERVE_COMMAND
, *PPERSISTENT_RESERVE_COMMAND
;
652 #endif /* defined(_MSC_EXTENSIONS) */
655 #pragma warning(pop) /* disable:4200 */
658 typedef _Struct_size_bytes_(Size
) struct _STORAGE_READ_CAPACITY
{
662 LARGE_INTEGER NumberOfBlocks
;
663 LARGE_INTEGER DiskLength
;
664 } STORAGE_READ_CAPACITY
, *PSTORAGE_READ_CAPACITY
;
666 typedef enum _WRITE_CACHE_TYPE
{
667 WriteCacheTypeUnknown
,
669 WriteCacheTypeWriteBack
,
670 WriteCacheTypeWriteThrough
673 typedef enum _WRITE_CACHE_ENABLE
{
674 WriteCacheEnableUnknown
,
677 } WRITE_CACHE_ENABLE
;
679 typedef enum _WRITE_CACHE_CHANGE
{
680 WriteCacheChangeUnknown
,
681 WriteCacheNotChangeable
,
683 } WRITE_CACHE_CHANGE
;
685 typedef enum _WRITE_THROUGH
{
687 WriteThroughNotSupported
,
688 WriteThroughSupported
691 typedef _Struct_size_bytes_(Size
) struct _STORAGE_WRITE_CACHE_PROPERTY
{
694 WRITE_CACHE_TYPE WriteCacheType
;
695 WRITE_CACHE_ENABLE WriteCacheEnabled
;
696 WRITE_CACHE_CHANGE WriteCacheChangeable
;
697 WRITE_THROUGH WriteThroughSupported
;
698 BOOLEAN FlushCacheSupported
;
699 BOOLEAN UserDefinedPowerProtection
;
700 BOOLEAN NVCacheEnabled
;
701 } STORAGE_WRITE_CACHE_PROPERTY
, *PSTORAGE_WRITE_CACHE_PROPERTY
;
707 #endif /* _NTDDSTOR_H_ */