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) */
83 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
85 #define IOCTL_STORAGE_CHECK_VERIFY \
86 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
88 #define IOCTL_STORAGE_CHECK_VERIFY2 \
89 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
91 #define IOCTL_STORAGE_EJECT_MEDIA \
92 CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
94 #define IOCTL_STORAGE_EJECTION_CONTROL \
95 CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
97 #define IOCTL_STORAGE_FIND_NEW_DEVICES \
98 CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
100 #define IOCTL_STORAGE_GET_DEVICE_NUMBER \
101 CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
103 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
104 CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
106 #define IOCTL_STORAGE_GET_MEDIA_TYPES \
107 CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
109 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
110 CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
112 #define IOCTL_STORAGE_LOAD_MEDIA \
113 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
115 #define IOCTL_STORAGE_LOAD_MEDIA2 \
116 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
118 #define IOCTL_STORAGE_MCN_CONTROL \
119 CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
121 #define IOCTL_STORAGE_MEDIA_REMOVAL \
122 CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
124 #define IOCTL_STORAGE_PREDICT_FAILURE \
125 CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
127 #define IOCTL_STORAGE_QUERY_PROPERTY \
128 CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
130 #define IOCTL_STORAGE_RELEASE \
131 CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
133 #define IOCTL_STORAGE_RESERVE \
134 CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
136 #define IOCTL_STORAGE_GET_HOTPLUG_INFO \
137 CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
139 #define IOCTL_STORAGE_SET_HOTPLUG_INFO \
140 CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
142 #define IOCTL_STORAGE_RESET_BUS \
143 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
145 #define IOCTL_STORAGE_RESET_DEVICE \
146 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
148 #define IOCTL_STORAGE_BREAK_RESERVATION \
149 CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
151 #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN \
152 CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS)
154 #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT \
155 CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
157 #define IOCTL_STORAGE_READ_CAPACITY \
158 CTL_CODE(IOCTL_STORAGE_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
160 #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES \
161 CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS)
163 #define IOCTL_STORAGE_GET_BC_PROPERTIES \
164 CTL_CODE(IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS)
166 #define IOCTL_STORAGE_ALLOCATE_BC_STREAM \
167 CTL_CODE(IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
169 #define IOCTL_STORAGE_FREE_BC_STREAM \
170 CTL_CODE(IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
172 #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT \
173 CTL_CODE(IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS)
175 #define OBSOLETE_IOCTL_STORAGE_RESET_BUS \
176 CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
178 #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE \
179 CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
181 #define RECOVERED_WRITES_VALID 0x00000001
182 #define UNRECOVERED_WRITES_VALID 0x00000002
183 #define RECOVERED_READS_VALID 0x00000004
184 #define UNRECOVERED_READS_VALID 0x00000008
185 #define WRITE_COMPRESSION_INFO_VALID 0x00000010
186 #define READ_COMPRESSION_INFO_VALID 0x00000020
188 #define TAPE_RETURN_STATISTICS 0L
189 #define TAPE_RETURN_ENV_INFO 1L
190 #define TAPE_RESET_STATISTICS 2L
192 /* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
193 #define MEDIA_ERASEABLE 0x00000001
194 #define MEDIA_WRITE_ONCE 0x00000002
195 #define MEDIA_READ_ONLY 0x00000004
196 #define MEDIA_READ_WRITE 0x00000008
197 #define MEDIA_WRITE_PROTECTED 0x00000100
198 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
200 #define StorageIdTypeNAA StorageIdTypeFCPHName
202 #define DeviceDsmActionFlag_NonDestructive 0x80000000
204 #define IsDsmActionNonDestructive(_Action) ((BOOLEAN)((_Action & DeviceDsmActionFlag_NonDestructive) != 0))
206 #define DeviceDsmAction_None 0
207 #define DeviceDsmAction_Trim 1
208 #define DeviceDsmAction_Notification (2 | DeviceDsmActionFlag_NonDestructive)
210 #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE 0x00000001
212 #define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001
213 #define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002
215 #define IOCTL_STORAGE_BC_VERSION 1
217 #define STORAGE_PRIORITY_HINT_SUPPORTED 0x0001
219 typedef struct _STORAGE_HOTPLUG_INFO
{
221 BOOLEAN MediaRemovable
;
222 BOOLEAN MediaHotplug
;
223 BOOLEAN DeviceHotplug
;
224 BOOLEAN WriteCacheEnableOverride
;
225 } STORAGE_HOTPLUG_INFO
, *PSTORAGE_HOTPLUG_INFO
;
227 typedef struct _STORAGE_DEVICE_NUMBER
{
228 DEVICE_TYPE DeviceType
;
230 ULONG PartitionNumber
;
231 } STORAGE_DEVICE_NUMBER
, *PSTORAGE_DEVICE_NUMBER
;
233 typedef struct _STORAGE_BUS_RESET_REQUEST
{
235 } STORAGE_BUS_RESET_REQUEST
, *PSTORAGE_BUS_RESET_REQUEST
;
237 typedef struct _STORAGE_BREAK_RESERVATION_REQUEST
{
243 } STORAGE_BREAK_RESERVATION_REQUEST
, *PSTORAGE_BREAK_RESERVATION_REQUEST
;
246 typedef struct _PREVENT_MEDIA_REMOVAL
{
247 BOOLEAN PreventMediaRemoval
;
248 } PREVENT_MEDIA_REMOVAL
, *PPREVENT_MEDIA_REMOVAL
;
251 typedef struct _CLASS_MEDIA_CHANGE_CONTEXT
{
252 ULONG MediaChangeCount
;
254 } CLASS_MEDIA_CHANGE_CONTEXT
, *PCLASS_MEDIA_CHANGE_CONTEXT
;
256 typedef struct _TAPE_STATISTICS
{
259 LARGE_INTEGER RecoveredWrites
;
260 LARGE_INTEGER UnrecoveredWrites
;
261 LARGE_INTEGER RecoveredReads
;
262 LARGE_INTEGER UnrecoveredReads
;
263 UCHAR CompressionRatioReads
;
264 UCHAR CompressionRatioWrites
;
265 } TAPE_STATISTICS
, *PTAPE_STATISTICS
;
267 typedef struct _TAPE_GET_STATISTICS
{
269 } TAPE_GET_STATISTICS
, *PTAPE_GET_STATISTICS
;
271 typedef enum _STORAGE_MEDIA_TYPE
{
325 #if (NTDDI_VERSION < NTDDI_WINXP)
339 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
341 typedef enum _STORAGE_BUS_TYPE
{
342 BusTypeUnknown
= 0x00,
357 BusTypeFileBackedVirtual
,
359 BusTypeMaxReserved
= 0x7F
360 } STORAGE_BUS_TYPE
, *PSTORAGE_BUS_TYPE
;
362 typedef struct _DEVICE_MEDIA_INFO
{
365 LARGE_INTEGER Cylinders
;
366 STORAGE_MEDIA_TYPE MediaType
;
367 ULONG TracksPerCylinder
;
368 ULONG SectorsPerTrack
;
369 ULONG BytesPerSector
;
370 ULONG NumberMediaSides
;
371 ULONG MediaCharacteristics
;
374 LARGE_INTEGER Cylinders
;
375 STORAGE_MEDIA_TYPE MediaType
;
376 ULONG TracksPerCylinder
;
377 ULONG SectorsPerTrack
;
378 ULONG BytesPerSector
;
379 ULONG NumberMediaSides
;
380 ULONG MediaCharacteristics
;
383 STORAGE_MEDIA_TYPE MediaType
;
384 ULONG MediaCharacteristics
;
385 ULONG CurrentBlockSize
;
386 STORAGE_BUS_TYPE BusType
;
395 } DEVICE_MEDIA_INFO
, *PDEVICE_MEDIA_INFO
;
397 typedef struct _GET_MEDIA_TYPES
{
399 ULONG MediaInfoCount
;
400 DEVICE_MEDIA_INFO MediaInfo
[1];
401 } GET_MEDIA_TYPES
, *PGET_MEDIA_TYPES
;
403 typedef struct _STORAGE_PREDICT_FAILURE
{
404 ULONG PredictFailure
;
405 UCHAR VendorSpecific
[512];
406 } STORAGE_PREDICT_FAILURE
, *PSTORAGE_PREDICT_FAILURE
;
408 typedef enum _STORAGE_QUERY_TYPE
{
409 PropertyStandardQuery
= 0,
412 PropertyQueryMaxDefined
413 } STORAGE_QUERY_TYPE
, *PSTORAGE_QUERY_TYPE
;
415 typedef enum _STORAGE_PROPERTY_ID
{
416 StorageDeviceProperty
= 0,
417 StorageAdapterProperty
,
418 StorageDeviceIdProperty
,
419 StorageDeviceUniqueIdProperty
,
420 StorageDeviceWriteCacheProperty
,
421 StorageMiniportProperty
,
422 StorageAccessAlignmentProperty
,
423 StorageDeviceSeekPenaltyProperty
,
424 StorageDeviceTrimProperty
,
425 StorageDeviceWriteAggregationProperty
426 } STORAGE_PROPERTY_ID
, *PSTORAGE_PROPERTY_ID
;
428 typedef struct _STORAGE_PROPERTY_QUERY
{
429 STORAGE_PROPERTY_ID PropertyId
;
430 STORAGE_QUERY_TYPE QueryType
;
431 UCHAR AdditionalParameters
[1];
432 } STORAGE_PROPERTY_QUERY
, *PSTORAGE_PROPERTY_QUERY
;
434 typedef struct _STORAGE_DESCRIPTOR_HEADER
{
437 } STORAGE_DESCRIPTOR_HEADER
, *PSTORAGE_DESCRIPTOR_HEADER
;
439 typedef struct _STORAGE_DEVICE_DESCRIPTOR
{
443 UCHAR DeviceTypeModifier
;
444 BOOLEAN RemovableMedia
;
445 BOOLEAN CommandQueueing
;
446 ULONG VendorIdOffset
;
447 ULONG ProductIdOffset
;
448 ULONG ProductRevisionOffset
;
449 ULONG SerialNumberOffset
;
450 STORAGE_BUS_TYPE BusType
;
451 ULONG RawPropertiesLength
;
452 UCHAR RawDeviceProperties
[1];
453 } STORAGE_DEVICE_DESCRIPTOR
, *PSTORAGE_DEVICE_DESCRIPTOR
;
455 typedef struct _STORAGE_ADAPTER_DESCRIPTOR
{
458 ULONG MaximumTransferLength
;
459 ULONG MaximumPhysicalPages
;
461 BOOLEAN AdapterUsesPio
;
462 BOOLEAN AdapterScansDown
;
463 BOOLEAN CommandQueueing
;
464 BOOLEAN AcceleratedTransfer
;
465 #if (NTDDI_VERSION < NTDDI_WINXP)
470 USHORT BusMajorVersion
;
471 USHORT BusMinorVersion
;
472 } STORAGE_ADAPTER_DESCRIPTOR
, *PSTORAGE_ADAPTER_DESCRIPTOR
;
474 typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
{
477 ULONG BytesPerCacheLine
;
478 ULONG BytesOffsetForCacheAlignment
;
479 ULONG BytesPerLogicalSector
;
480 ULONG BytesPerPhysicalSector
;
481 ULONG BytesOffsetForSectorAlignment
;
482 } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
;
484 typedef enum _STORAGE_PORT_CODE_SET
{
485 StoragePortCodeSetReserved
= 0,
486 StoragePortCodeSetStorport
= 1,
487 StoragePortCodeSetSCSIport
= 2
488 } STORAGE_PORT_CODE_SET
, *PSTORAGE_PORT_CODE_SET
;
490 typedef struct _STORAGE_MINIPORT_DESCRIPTOR
{
493 STORAGE_PORT_CODE_SET Portdriver
;
494 BOOLEAN LUNResetSupported
;
495 BOOLEAN TargetResetSupported
;
496 } STORAGE_MINIPORT_DESCRIPTOR
, *PSTORAGE_MINIPORT_DESCRIPTOR
;
498 typedef enum _STORAGE_IDENTIFIER_CODE_SET
{
499 StorageIdCodeSetReserved
= 0,
500 StorageIdCodeSetBinary
= 1,
501 StorageIdCodeSetAscii
= 2,
502 StorageIdCodeSetUtf8
= 3
503 } STORAGE_IDENTIFIER_CODE_SET
, *PSTORAGE_IDENTIFIER_CODE_SET
;
505 typedef enum _STORAGE_IDENTIFIER_TYPE
{
506 StorageIdTypeVendorSpecific
= 0,
507 StorageIdTypeVendorId
= 1,
508 StorageIdTypeEUI64
= 2,
509 StorageIdTypeFCPHName
= 3,
510 StorageIdTypePortRelative
= 4,
511 StorageIdTypeTargetPortGroup
= 5,
512 StorageIdTypeLogicalUnitGroup
= 6,
513 StorageIdTypeMD5LogicalUnitIdentifier
= 7,
514 StorageIdTypeScsiNameString
= 8
515 } STORAGE_IDENTIFIER_TYPE
, *PSTORAGE_IDENTIFIER_TYPE
;
517 typedef enum _STORAGE_ID_NAA_FORMAT
{
518 StorageIdNAAFormatIEEEExtended
= 2,
519 StorageIdNAAFormatIEEERegistered
= 3,
520 StorageIdNAAFormatIEEEERegisteredExtended
= 5
521 } STORAGE_ID_NAA_FORMAT
, *PSTORAGE_ID_NAA_FORMAT
;
523 typedef enum _STORAGE_ASSOCIATION_TYPE
{
524 StorageIdAssocDevice
= 0,
525 StorageIdAssocPort
= 1,
526 StorageIdAssocTarget
= 2
527 } STORAGE_ASSOCIATION_TYPE
, *PSTORAGE_ASSOCIATION_TYPE
;
529 typedef struct _STORAGE_IDENTIFIER
{
530 STORAGE_IDENTIFIER_CODE_SET CodeSet
;
531 STORAGE_IDENTIFIER_TYPE Type
;
532 USHORT IdentifierSize
;
534 STORAGE_ASSOCIATION_TYPE Association
;
536 } STORAGE_IDENTIFIER
, *PSTORAGE_IDENTIFIER
;
538 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR
{
541 ULONG NumberOfIdentifiers
;
542 UCHAR Identifiers
[1];
543 } STORAGE_DEVICE_ID_DESCRIPTOR
, *PSTORAGE_DEVICE_ID_DESCRIPTOR
;
545 typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR
{
548 BOOLEAN IncursSeekPenalty
;
549 } DEVICE_SEEK_PENALTY_DESCRIPTOR
, *PDEVICE_SEEK_PENALTY_DESCRIPTOR
;
551 typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR
{
554 BOOLEAN BenefitsFromWriteAggregation
;
555 } DEVICE_WRITE_AGGREGATION_DESCRIPTOR
, *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR
;
557 typedef struct _DEVICE_TRIM_DESCRIPTOR
{
561 } DEVICE_TRIM_DESCRIPTOR
, *PDEVICE_TRIM_DESCRIPTOR
;
563 typedef ULONG DEVICE_DATA_MANAGEMENT_SET_ACTION
;
565 typedef struct _DEVICE_DATA_SET_RANGE
{
566 LONGLONG StartingOffset
;
567 ULONGLONG LengthInBytes
;
568 } DEVICE_DATA_SET_RANGE
, *PDEVICE_DATA_SET_RANGE
;
570 typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES
{
572 DEVICE_DATA_MANAGEMENT_SET_ACTION Action
;
574 ULONG ParameterBlockOffset
;
575 ULONG ParameterBlockLength
;
576 ULONG DataSetRangesOffset
;
577 ULONG DataSetRangesLength
;
578 } DEVICE_MANAGE_DATA_SET_ATTRIBUTES
, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES
;
580 typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS
{
583 ULONG NumFileTypeIDs
;
585 } DEVICE_DSM_NOTIFICATION_PARAMETERS
, *PDEVICE_DSM_NOTIFICATION_PARAMETERS
;
587 typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT
{
588 ULONG MaximumRequestsPerPeriod
;
590 ULONGLONG MaximumRequestSize
;
591 ULONG EstimatedTimePerRequest
;
592 ULONG NumOutStandingRequests
;
593 ULONGLONG RequestSize
;
594 } STORAGE_GET_BC_PROPERTIES_OUTPUT
, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT
;
596 typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT
{
598 ULONG RequestsPerPeriod
;
600 BOOLEAN RetryFailures
;
602 BOOLEAN Reserved1
[2];
605 } STORAGE_ALLOCATE_BC_STREAM_INPUT
, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT
;
607 typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT
{
608 ULONGLONG RequestSize
;
609 ULONG NumOutStandingRequests
;
610 } STORAGE_ALLOCATE_BC_STREAM_OUTPUT
, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT
;
612 typedef struct _STORAGE_PRIORITY_HINT_SUPPORT
{
614 } STORAGE_PRIORITY_HINT_SUPPORT
, *PSTORAGE_PRIORITY_HINT_SUPPORT
;
616 #if defined(_MSC_EXTENSIONS)
618 typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA
{
620 USHORT SerialNumberLength
;
621 UCHAR SerialNumber
[0];
622 } STORAGE_MEDIA_SERIAL_NUMBER_DATA
, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA
;
624 typedef struct _PERSISTENT_RESERVE_COMMAND
{
627 _ANONYMOUS_UNION
union {
629 UCHAR ServiceAction
:5;
631 USHORT AllocationLength
;
634 UCHAR ServiceAction
:5;
638 UCHAR ParameterList
[0];
641 } PERSISTENT_RESERVE_COMMAND
, *PPERSISTENT_RESERVE_COMMAND
;
643 #endif /* defined(_MSC_EXTENSIONS) */
645 typedef struct _STORAGE_READ_CAPACITY
{
649 LARGE_INTEGER NumberOfBlocks
;
650 LARGE_INTEGER DiskLength
;
651 } STORAGE_READ_CAPACITY
, *PSTORAGE_READ_CAPACITY
;
653 typedef enum _WRITE_CACHE_TYPE
{
654 WriteCacheTypeUnknown
,
656 WriteCacheTypeWriteBack
,
657 WriteCacheTypeWriteThrough
660 typedef enum _WRITE_CACHE_ENABLE
{
661 WriteCacheEnableUnknown
,
664 } WRITE_CACHE_ENABLE
;
666 typedef enum _WRITE_CACHE_CHANGE
{
667 WriteCacheChangeUnknown
,
668 WriteCacheNotChangeable
,
670 } WRITE_CACHE_CHANGE
;
672 typedef enum _WRITE_THROUGH
{
674 WriteThroughNotSupported
,
675 WriteThroughSupported
678 typedef struct _STORAGE_WRITE_CACHE_PROPERTY
{
681 WRITE_CACHE_TYPE WriteCacheType
;
682 WRITE_CACHE_ENABLE WriteCacheEnabled
;
683 WRITE_CACHE_CHANGE WriteCacheChangeable
;
684 WRITE_THROUGH WriteThroughSupported
;
685 BOOLEAN FlushCacheSupported
;
686 BOOLEAN UserDefinedPowerProtection
;
687 BOOLEAN NVCacheEnabled
;
688 } STORAGE_WRITE_CACHE_PROPERTY
, *PSTORAGE_WRITE_CACHE_PROPERTY
;
694 #endif /* _NTDDSTOR_H_ */