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
;
245 typedef struct _PREVENT_MEDIA_REMOVAL
{
246 BOOLEAN PreventMediaRemoval
;
247 } PREVENT_MEDIA_REMOVAL
, *PPREVENT_MEDIA_REMOVAL
;
249 typedef struct _CLASS_MEDIA_CHANGE_CONTEXT
{
250 ULONG MediaChangeCount
;
252 } CLASS_MEDIA_CHANGE_CONTEXT
, *PCLASS_MEDIA_CHANGE_CONTEXT
;
254 typedef struct _TAPE_STATISTICS
{
257 LARGE_INTEGER RecoveredWrites
;
258 LARGE_INTEGER UnrecoveredWrites
;
259 LARGE_INTEGER RecoveredReads
;
260 LARGE_INTEGER UnrecoveredReads
;
261 UCHAR CompressionRatioReads
;
262 UCHAR CompressionRatioWrites
;
263 } TAPE_STATISTICS
, *PTAPE_STATISTICS
;
265 typedef struct _TAPE_GET_STATISTICS
{
267 } TAPE_GET_STATISTICS
, *PTAPE_GET_STATISTICS
;
269 typedef enum _STORAGE_MEDIA_TYPE
{
323 #if (NTDDI_VERSION < NTDDI_WINXP)
337 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
339 typedef enum _STORAGE_BUS_TYPE
{
340 BusTypeUnknown
= 0x00,
355 BusTypeFileBackedVirtual
,
357 BusTypeMaxReserved
= 0x7F
358 } STORAGE_BUS_TYPE
, *PSTORAGE_BUS_TYPE
;
360 typedef struct _DEVICE_MEDIA_INFO
{
363 LARGE_INTEGER Cylinders
;
364 STORAGE_MEDIA_TYPE MediaType
;
365 ULONG TracksPerCylinder
;
366 ULONG SectorsPerTrack
;
367 ULONG BytesPerSector
;
368 ULONG NumberMediaSides
;
369 ULONG MediaCharacteristics
;
372 LARGE_INTEGER Cylinders
;
373 STORAGE_MEDIA_TYPE MediaType
;
374 ULONG TracksPerCylinder
;
375 ULONG SectorsPerTrack
;
376 ULONG BytesPerSector
;
377 ULONG NumberMediaSides
;
378 ULONG MediaCharacteristics
;
381 STORAGE_MEDIA_TYPE MediaType
;
382 ULONG MediaCharacteristics
;
383 ULONG CurrentBlockSize
;
384 STORAGE_BUS_TYPE BusType
;
393 } DEVICE_MEDIA_INFO
, *PDEVICE_MEDIA_INFO
;
395 typedef struct _GET_MEDIA_TYPES
{
397 ULONG MediaInfoCount
;
398 DEVICE_MEDIA_INFO MediaInfo
[1];
399 } GET_MEDIA_TYPES
, *PGET_MEDIA_TYPES
;
401 typedef struct _STORAGE_PREDICT_FAILURE
{
402 ULONG PredictFailure
;
403 UCHAR VendorSpecific
[512];
404 } STORAGE_PREDICT_FAILURE
, *PSTORAGE_PREDICT_FAILURE
;
406 typedef enum _STORAGE_QUERY_TYPE
{
407 PropertyStandardQuery
= 0,
410 PropertyQueryMaxDefined
411 } STORAGE_QUERY_TYPE
, *PSTORAGE_QUERY_TYPE
;
413 typedef enum _STORAGE_PROPERTY_ID
{
414 StorageDeviceProperty
= 0,
415 StorageAdapterProperty
,
416 StorageDeviceIdProperty
,
417 StorageDeviceUniqueIdProperty
,
418 StorageDeviceWriteCacheProperty
,
419 StorageMiniportProperty
,
420 StorageAccessAlignmentProperty
,
421 StorageDeviceSeekPenaltyProperty
,
422 StorageDeviceTrimProperty
,
423 StorageDeviceWriteAggregationProperty
424 } STORAGE_PROPERTY_ID
, *PSTORAGE_PROPERTY_ID
;
426 typedef struct _STORAGE_PROPERTY_QUERY
{
427 STORAGE_PROPERTY_ID PropertyId
;
428 STORAGE_QUERY_TYPE QueryType
;
429 UCHAR AdditionalParameters
[1];
430 } STORAGE_PROPERTY_QUERY
, *PSTORAGE_PROPERTY_QUERY
;
432 typedef struct _STORAGE_DESCRIPTOR_HEADER
{
435 } STORAGE_DESCRIPTOR_HEADER
, *PSTORAGE_DESCRIPTOR_HEADER
;
437 typedef struct _STORAGE_DEVICE_DESCRIPTOR
{
441 UCHAR DeviceTypeModifier
;
442 BOOLEAN RemovableMedia
;
443 BOOLEAN CommandQueueing
;
444 ULONG VendorIdOffset
;
445 ULONG ProductIdOffset
;
446 ULONG ProductRevisionOffset
;
447 ULONG SerialNumberOffset
;
448 STORAGE_BUS_TYPE BusType
;
449 ULONG RawPropertiesLength
;
450 UCHAR RawDeviceProperties
[1];
451 } STORAGE_DEVICE_DESCRIPTOR
, *PSTORAGE_DEVICE_DESCRIPTOR
;
453 typedef struct _STORAGE_ADAPTER_DESCRIPTOR
{
456 ULONG MaximumTransferLength
;
457 ULONG MaximumPhysicalPages
;
459 BOOLEAN AdapterUsesPio
;
460 BOOLEAN AdapterScansDown
;
461 BOOLEAN CommandQueueing
;
462 BOOLEAN AcceleratedTransfer
;
463 #if (NTDDI_VERSION < NTDDI_WINXP)
468 USHORT BusMajorVersion
;
469 USHORT BusMinorVersion
;
470 } STORAGE_ADAPTER_DESCRIPTOR
, *PSTORAGE_ADAPTER_DESCRIPTOR
;
472 typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
{
475 ULONG BytesPerCacheLine
;
476 ULONG BytesOffsetForCacheAlignment
;
477 ULONG BytesPerLogicalSector
;
478 ULONG BytesPerPhysicalSector
;
479 ULONG BytesOffsetForSectorAlignment
;
480 } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
;
482 typedef enum _STORAGE_PORT_CODE_SET
{
483 StoragePortCodeSetReserved
= 0,
484 StoragePortCodeSetStorport
= 1,
485 StoragePortCodeSetSCSIport
= 2
486 } STORAGE_PORT_CODE_SET
, *PSTORAGE_PORT_CODE_SET
;
488 typedef struct _STORAGE_MINIPORT_DESCRIPTOR
{
491 STORAGE_PORT_CODE_SET Portdriver
;
492 BOOLEAN LUNResetSupported
;
493 BOOLEAN TargetResetSupported
;
494 } STORAGE_MINIPORT_DESCRIPTOR
, *PSTORAGE_MINIPORT_DESCRIPTOR
;
496 typedef enum _STORAGE_IDENTIFIER_CODE_SET
{
497 StorageIdCodeSetReserved
= 0,
498 StorageIdCodeSetBinary
= 1,
499 StorageIdCodeSetAscii
= 2,
500 StorageIdCodeSetUtf8
= 3
501 } STORAGE_IDENTIFIER_CODE_SET
, *PSTORAGE_IDENTIFIER_CODE_SET
;
503 typedef enum _STORAGE_IDENTIFIER_TYPE
{
504 StorageIdTypeVendorSpecific
= 0,
505 StorageIdTypeVendorId
= 1,
506 StorageIdTypeEUI64
= 2,
507 StorageIdTypeFCPHName
= 3,
508 StorageIdTypePortRelative
= 4,
509 StorageIdTypeTargetPortGroup
= 5,
510 StorageIdTypeLogicalUnitGroup
= 6,
511 StorageIdTypeMD5LogicalUnitIdentifier
= 7,
512 StorageIdTypeScsiNameString
= 8
513 } STORAGE_IDENTIFIER_TYPE
, *PSTORAGE_IDENTIFIER_TYPE
;
515 typedef enum _STORAGE_ID_NAA_FORMAT
{
516 StorageIdNAAFormatIEEEExtended
= 2,
517 StorageIdNAAFormatIEEERegistered
= 3,
518 StorageIdNAAFormatIEEEERegisteredExtended
= 5
519 } STORAGE_ID_NAA_FORMAT
, *PSTORAGE_ID_NAA_FORMAT
;
521 typedef enum _STORAGE_ASSOCIATION_TYPE
{
522 StorageIdAssocDevice
= 0,
523 StorageIdAssocPort
= 1,
524 StorageIdAssocTarget
= 2
525 } STORAGE_ASSOCIATION_TYPE
, *PSTORAGE_ASSOCIATION_TYPE
;
527 typedef struct _STORAGE_IDENTIFIER
{
528 STORAGE_IDENTIFIER_CODE_SET CodeSet
;
529 STORAGE_IDENTIFIER_TYPE Type
;
530 USHORT IdentifierSize
;
532 STORAGE_ASSOCIATION_TYPE Association
;
534 } STORAGE_IDENTIFIER
, *PSTORAGE_IDENTIFIER
;
536 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR
{
539 ULONG NumberOfIdentifiers
;
540 UCHAR Identifiers
[1];
541 } STORAGE_DEVICE_ID_DESCRIPTOR
, *PSTORAGE_DEVICE_ID_DESCRIPTOR
;
543 typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR
{
546 BOOLEAN IncursSeekPenalty
;
547 } DEVICE_SEEK_PENALTY_DESCRIPTOR
, *PDEVICE_SEEK_PENALTY_DESCRIPTOR
;
549 typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR
{
552 BOOLEAN BenefitsFromWriteAggregation
;
553 } DEVICE_WRITE_AGGREGATION_DESCRIPTOR
, *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR
;
555 typedef struct _DEVICE_TRIM_DESCRIPTOR
{
559 } DEVICE_TRIM_DESCRIPTOR
, *PDEVICE_TRIM_DESCRIPTOR
;
561 typedef ULONG DEVICE_DATA_MANAGEMENT_SET_ACTION
;
563 typedef struct _DEVICE_DATA_SET_RANGE
{
564 LONGLONG StartingOffset
;
565 ULONGLONG LengthInBytes
;
566 } DEVICE_DATA_SET_RANGE
, *PDEVICE_DATA_SET_RANGE
;
568 typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES
{
570 DEVICE_DATA_MANAGEMENT_SET_ACTION Action
;
572 ULONG ParameterBlockOffset
;
573 ULONG ParameterBlockLength
;
574 ULONG DataSetRangesOffset
;
575 ULONG DataSetRangesLength
;
576 } DEVICE_MANAGE_DATA_SET_ATTRIBUTES
, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES
;
578 typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS
{
581 ULONG NumFileTypeIDs
;
583 } DEVICE_DSM_NOTIFICATION_PARAMETERS
, *PDEVICE_DSM_NOTIFICATION_PARAMETERS
;
585 typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT
{
586 ULONG MaximumRequestsPerPeriod
;
588 ULONGLONG MaximumRequestSize
;
589 ULONG EstimatedTimePerRequest
;
590 ULONG NumOutStandingRequests
;
591 ULONGLONG RequestSize
;
592 } STORAGE_GET_BC_PROPERTIES_OUTPUT
, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT
;
594 typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT
{
596 ULONG RequestsPerPeriod
;
598 BOOLEAN RetryFailures
;
600 BOOLEAN Reserved1
[2];
603 } STORAGE_ALLOCATE_BC_STREAM_INPUT
, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT
;
605 typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT
{
606 ULONGLONG RequestSize
;
607 ULONG NumOutStandingRequests
;
608 } STORAGE_ALLOCATE_BC_STREAM_OUTPUT
, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT
;
610 typedef struct _STORAGE_PRIORITY_HINT_SUPPORT
{
612 } STORAGE_PRIORITY_HINT_SUPPORT
, *PSTORAGE_PRIORITY_HINT_SUPPORT
;
614 #if defined(_MSC_EXTENSIONS)
616 typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA
{
618 USHORT SerialNumberLength
;
619 UCHAR SerialNumber
[0];
620 } STORAGE_MEDIA_SERIAL_NUMBER_DATA
, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA
;
622 typedef struct _PERSISTENT_RESERVE_COMMAND
{
625 _ANONYMOUS_UNION
union {
627 UCHAR ServiceAction
:5;
629 USHORT AllocationLength
;
632 UCHAR ServiceAction
:5;
636 UCHAR ParameterList
[0];
639 } PERSISTENT_RESERVE_COMMAND
, *PPERSISTENT_RESERVE_COMMAND
;
641 #endif /* defined(_MSC_EXTENSIONS) */
643 typedef struct _STORAGE_READ_CAPACITY
{
647 LARGE_INTEGER NumberOfBlocks
;
648 LARGE_INTEGER DiskLength
;
649 } STORAGE_READ_CAPACITY
, *PSTORAGE_READ_CAPACITY
;
651 typedef enum _WRITE_CACHE_TYPE
{
652 WriteCacheTypeUnknown
,
654 WriteCacheTypeWriteBack
,
655 WriteCacheTypeWriteThrough
658 typedef enum _WRITE_CACHE_ENABLE
{
659 WriteCacheEnableUnknown
,
662 } WRITE_CACHE_ENABLE
;
664 typedef enum _WRITE_CACHE_CHANGE
{
665 WriteCacheChangeUnknown
,
666 WriteCacheNotChangeable
,
668 } WRITE_CACHE_CHANGE
;
670 typedef enum _WRITE_THROUGH
{
672 WriteThroughNotSupported
,
673 WriteThroughSupported
676 typedef struct _STORAGE_WRITE_CACHE_PROPERTY
{
679 WRITE_CACHE_TYPE WriteCacheType
;
680 WRITE_CACHE_ENABLE WriteCacheEnabled
;
681 WRITE_CACHE_CHANGE WriteCacheChangeable
;
682 WRITE_THROUGH WriteThroughSupported
;
683 BOOLEAN FlushCacheSupported
;
684 BOOLEAN UserDefinedPowerProtection
;
685 BOOLEAN NVCacheEnabled
;
686 } STORAGE_WRITE_CACHE_PROPERTY
, *PSTORAGE_WRITE_CACHE_PROPERTY
;
692 #endif /* _NTDDSTOR_H_ */