1 /* 2 * ntdddisk.h 3 * 4 * Disk IOCTL interface. 5 * 6 * This file is part of the w32api package. 7 * 8 * Contributors: 9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 10 * 11 * THIS SOFTWARE IS NOT COPYRIGHTED 12 * 13 * This source code is offered for use in the public domain. You may 14 * use, modify or distribute it freely. 15 * 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. 20 * 21 */ 22 23 #ifndef _NTDDDISK_H_ 24 #define _NTDDDISK_H_ 25 26 /* Helper macro to enable gcc's extension. */ 27 #ifndef __GNU_EXTENSION 28 #ifdef __GNUC__ 29 #define __GNU_EXTENSION __extension__ 30 #else 31 #define __GNU_EXTENSION 32 #endif 33 #endif 34 35 #include "ntddstor.h" 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #define DD_DISK_DEVICE_NAME "\\Device\\UNKNOWN" 42 #define DD_DISK_DEVICE_NAME_U L"\\Device\\UNKNOWN" 43 44 #define IOCTL_DISK_BASE FILE_DEVICE_DISK 45 46 #define IOCTL_DISK_ARE_VOLUMES_READY \ 47 CTL_CODE(IOCTL_DISK_BASE, 0x0087, METHOD_BUFFERED, FILE_READ_ACCESS) 48 49 #define IOCTL_DISK_CHECK_VERIFY \ 50 CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) 51 52 #define IOCTL_DISK_CONTROLLER_NUMBER \ 53 CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS) 54 55 #define IOCTL_DISK_CREATE_DISK \ 56 CTL_CODE(IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 57 58 #define IOCTL_DISK_DELETE_DRIVE_LAYOUT \ 59 CTL_CODE(IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 60 61 #define IOCTL_DISK_FIND_NEW_DEVICES \ 62 CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) 63 64 #define IOCTL_DISK_FORMAT_DRIVE \ 65 CTL_CODE(IOCTL_DISK_BASE, 0x00f3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 66 67 #define IOCTL_DISK_FORMAT_TRACKS \ 68 CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 69 70 #define IOCTL_DISK_FORMAT_TRACKS_EX \ 71 CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 72 73 #define IOCTL_DISK_GET_CACHE_INFORMATION \ 74 CTL_CODE(IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS) 75 76 #define IOCTL_DISK_GET_CACHE_SETTING \ 77 CTL_CODE(IOCTL_DISK_BASE, 0x0038, METHOD_BUFFERED, FILE_READ_ACCESS) 78 79 #define IOCTL_DISK_GET_CLUSTER_INFO \ 80 CTL_CODE(IOCTL_DISK_BASE, 0x0085, METHOD_BUFFERED, FILE_ANY_ACCESS) 81 82 #define IOCTL_DISK_GET_DISK_ATTRIBUTES \ 83 CTL_CODE(IOCTL_DISK_BASE, 0x003c, METHOD_BUFFERED, FILE_ANY_ACCESS) 84 85 #define IOCTL_DISK_GET_DRIVE_GEOMETRY \ 86 CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) 87 88 #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX \ 89 CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS) 90 91 #define IOCTL_DISK_GET_DRIVE_LAYOUT \ 92 CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) 93 94 #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX \ 95 CTL_CODE(IOCTL_DISK_BASE, 0x0014, METHOD_BUFFERED, FILE_ANY_ACCESS) 96 97 #define IOCTL_DISK_GET_MEDIA_TYPES \ 98 CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) 99 100 #define IOCTL_DISK_GET_LENGTH_INFO \ 101 CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS) 102 103 #define IOCTL_DISK_GET_PARTITION_ATTRIBUTES \ 104 CTL_CODE(IOCTL_DISK_BASE, 0x003a, METHOD_BUFFERED, FILE_ANY_ACCESS) 105 106 #define IOCTL_DISK_GET_PARTITION_INFO \ 107 CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 108 109 #define IOCTL_DISK_GET_PARTITION_INFO_EX \ 110 CTL_CODE(IOCTL_DISK_BASE, 0x0012, METHOD_BUFFERED, FILE_ANY_ACCESS) 111 112 #define IOCTL_DISK_GET_PERFORMANCE_INFO \ 113 CTL_CODE(IOCTL_DISK_BASE, 0x0089, METHOD_BUFFERED, FILE_ANY_ACCESS) 114 115 #define IOCTL_DISK_GET_SAN_SETTINGS \ 116 CTL_CODE(IOCTL_DISK_BASE, 0x0080, METHOD_BUFFERED, FILE_READ_ACCESS) 117 118 #define IOCTL_DISK_GET_SNAPSHOT_INFO \ 119 CTL_CODE(IOCTL_DISK_BASE, 0x0082, METHOD_BUFFERED, FILE_READ_ACCESS) 120 121 #define IOCTL_DISK_GROW_PARTITION \ 122 CTL_CODE(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 123 124 #define IOCTL_DISK_HISTOGRAM_STRUCTURE \ 125 CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS) 126 127 #define IOCTL_DISK_HISTOGRAM_DATA \ 128 CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS) 129 130 #define IOCTL_DISK_HISTOGRAM_RESET \ 131 CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS) 132 133 #define IOCTL_DISK_INTERNAL_CLEAR_VERIFY \ 134 CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS) 135 136 #define IOCTL_DISK_INTERNAL_SET_VERIFY \ 137 CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS) 138 139 #define IOCTL_DISK_INTERNAL_SET_NOTIFY \ 140 CTL_CODE(IOCTL_DISK_BASE, 0x0102, METHOD_BUFFERED, FILE_ANY_ACCESS) 141 142 #define IOCTL_DISK_IS_CLUSTERED \ 143 CTL_CODE(IOCTL_DISK_BASE, 0x003e, METHOD_BUFFERED, FILE_ANY_ACCESS) 144 145 #define IOCTL_DISK_IS_WRITABLE \ 146 CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS) 147 148 #define IOCTL_DISK_LOGGING \ 149 CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS) 150 151 #define IOCTL_DISK_PERFORMANCE \ 152 CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) 153 154 #define IOCTL_DISK_PERFORMANCE_OFF \ 155 CTL_CODE(IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED, FILE_ANY_ACCESS) 156 157 #define IOCTL_DISK_REASSIGN_BLOCKS \ 158 CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 159 160 #define IOCTL_DISK_REQUEST_DATA \ 161 CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS) 162 163 #define IOCTL_DISK_REQUEST_STRUCTURE \ 164 CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS) 165 166 #define IOCTL_DISK_RESET_SNAPSHOT_INFO \ 167 CTL_CODE(IOCTL_DISK_BASE, 0x0084, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 168 169 #define IOCTL_DISK_MEDIA_REMOVAL \ 170 CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) 171 172 #define IOCTL_DISK_EJECT_MEDIA \ 173 CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) 174 175 #define IOCTL_DISK_LOAD_MEDIA \ 176 CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) 177 178 #define IOCTL_DISK_REASSIGN_BLOCKS_EX \ 179 CTL_CODE(IOCTL_DISK_BASE, 0x0029, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 180 181 #define IOCTL_DISK_RESERVE \ 182 CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) 183 184 #define IOCTL_DISK_RELEASE \ 185 CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) 186 187 #define IOCTL_DISK_FIND_NEW_DEVICES \ 188 CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) 189 190 #define IOCTL_DISK_SENSE_DEVICE \ 191 CTL_CODE(IOCTL_DISK_BASE, 0x00f8, METHOD_BUFFERED, FILE_ANY_ACCESS) 192 193 #define IOCTL_DISK_SET_CACHE_INFORMATION \ 194 CTL_CODE(IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 195 196 #define IOCTL_DISK_SET_CACHE_SETTING \ 197 CTL_CODE(IOCTL_DISK_BASE, 0x0039, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 198 199 #define IOCTL_DISK_SET_CLUSTER_INFO \ 200 CTL_CODE(IOCTL_DISK_BASE, 0x0086, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 201 202 #define IOCTL_DISK_SET_DISK_ATTRIBUTES \ 203 CTL_CODE(IOCTL_DISK_BASE, 0x003d, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 204 205 #define IOCTL_DISK_SET_DRIVE_LAYOUT \ 206 CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 207 208 #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX \ 209 CTL_CODE(IOCTL_DISK_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 210 211 #define IOCTL_DISK_SET_PARTITION_ATTRIBUTES \ 212 CTL_CODE(IOCTL_DISK_BASE, 0x003b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 213 214 #define IOCTL_DISK_SET_PARTITION_INFO \ 215 CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 216 217 #define IOCTL_DISK_SET_PARTITION_INFO_EX \ 218 CTL_CODE(IOCTL_DISK_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 219 220 #define IOCTL_DISK_SET_SAN_SETTINGS \ 221 CTL_CODE(IOCTL_DISK_BASE, 0x0081, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 222 223 #define IOCTL_DISK_SET_SNAPSHOT_INFO \ 224 CTL_CODE(IOCTL_DISK_BASE, 0x0083, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 225 226 // 227 // NTDDI_WIN2003 was an older define used in the early beta builds, which 228 // Microsoft forgot to fix in a few headers. 229 // NTDDI_WS03 is the correct term. 230 // 231 #if (NTDDI_VERSION < NTDDI_WS03) 232 #define IOCTL_DISK_GET_WRITE_CACHE_STATE \ 233 CTL_CODE(IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS) 234 #else 235 #define OBSOLETE_DISK_GET_WRITE_CACHE_STATE \ 236 CTL_CODE(IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS) 237 #endif 238 239 #define IOCTL_DISK_UPDATE_DRIVE_SIZE \ 240 CTL_CODE(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 241 242 #define IOCTL_DISK_UPDATE_PROPERTIES \ 243 CTL_CODE(IOCTL_DISK_BASE, 0x0050, METHOD_BUFFERED, FILE_ANY_ACCESS) 244 245 #define IOCTL_DISK_VERIFY \ 246 CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS) 247 248 #define IOCTL_DISK_VOLUMES_ARE_READY \ 249 CTL_CODE(IOCTL_DISK_BASE, 0x0088, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 250 251 #define IOCTL_DISK_COPY_DATA \ 252 CTL_CODE(IOCTL_DISK_BASE, 0x0019, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 253 254 #define IOCTL_DISK_SIMBAD \ 255 CTL_CODE(IOCTL_DISK_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 256 257 #define SMART_GET_VERSION \ 258 CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS) 259 260 #define SMART_RCV_DRIVE_DATA \ 261 CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 262 263 #define SMART_SEND_DRIVE_COMMAND \ 264 CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 265 266 #define PARTITION_ENTRY_UNUSED 0x00 267 #define PARTITION_FAT_12 0x01 268 #define PARTITION_XENIX_1 0x02 269 #define PARTITION_XENIX_2 0x03 270 #define PARTITION_FAT_16 0x04 271 #define PARTITION_EXTENDED 0x05 272 #define PARTITION_HUGE 0x06 273 #define PARTITION_IFS 0x07 274 #define PARTITION_OS2BOOTMGR 0x0A 275 #define PARTITION_FAT32 0x0B 276 #define PARTITION_FAT32_XINT13 0x0C 277 #define PARTITION_XINT13 0x0E 278 #define PARTITION_XINT13_EXTENDED 0x0F 279 #define PARTITION_MSFT_RECOVERY 0x27 280 #define PARTITION_MAIN_OS 0x28 281 #define PARTIITON_OS_DATA 0x29 282 #define PARTITION_PRE_INSTALLED 0x2a 283 #define PARTITION_BSP 0x2b 284 #define PARTITION_DPP 0x2c 285 #define PARTITION_WINDOWS_SYSTEM 0x2d 286 #define PARTITION_PREP 0x41 287 #define PARTITION_LDM 0x42 288 #define PARTITION_DM 0x54 289 #define PARTITION_EZDRIVE 0x55 290 #define PARTITION_UNIX 0x63 291 #define PARTITION_SPACES_DATA 0xD7 292 #define PARTITION_SPACES 0xE7 293 #define PARTITION_GPT 0xEE 294 #define PARTITION_SYSTEM 0xEF 295 296 #define VALID_NTFT 0xC0 297 #define PARTITION_NTFT 0x80 298 #ifdef __REACTOS__ 299 #define PARTITION_OLD_LINUX 0x43 300 #define PARTITION_LINUX 0x83 301 #define PARTITION_ISO9660 0x96 302 #define PARTITION_FREEBSD 0xA5 303 #define PARTITION_OPENBSD 0xA6 304 #define PARTITION_NETBSD 0xA9 305 #endif 306 307 #define IsFTPartition( PartitionType ) \ 308 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT_12)) || \ 309 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_HUGE)) || \ 310 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_IFS)) || \ 311 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32)) || \ 312 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32_XINT13)) || \ 313 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_XINT13)) 314 315 316 #define IsContainerPartition(PartitionType) \ 317 (((PartitionType) == PARTITION_EXTENDED) || \ 318 ((PartitionType) == PARTITION_XINT13_EXTENDED)) 319 320 #ifdef __REACTOS__ 321 #define IsRecognizedPartition(PartitionType) ( \ 322 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT_12)) || \ 323 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_HUGE)) || \ 324 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_IFS)) || \ 325 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32)) || \ 326 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32_XINT13)) || \ 327 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_XINT13)) || \ 328 ((PartitionType) == PARTITION_FAT_12) || \ 329 ((PartitionType) == PARTITION_FAT_16) || \ 330 ((PartitionType) == PARTITION_HUGE) || \ 331 ((PartitionType) == PARTITION_IFS) || \ 332 ((PartitionType) == PARTITION_FAT32) || \ 333 ((PartitionType) == PARTITION_FAT32_XINT13) || \ 334 ((PartitionType) == PARTITION_XINT13) || \ 335 ((PartitionType) == PARTITION_LINUX) || \ 336 ((PartitionType) == PARTITION_OLD_LINUX) || \ 337 ((PartitionType) == PARTITION_ISO9660) || \ 338 ((PartitionType) == PARTITION_FREEBSD) || \ 339 ((PartitionType) == PARTITION_OPENBSD) || \ 340 ((PartitionType) == PARTITION_NETBSD)) 341 #else 342 #define IsRecognizedPartition(PartitionType) ( \ 343 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT_12)) || \ 344 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_HUGE)) || \ 345 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_IFS)) || \ 346 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32)) || \ 347 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32_XINT13)) || \ 348 (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_XINT13)) || \ 349 ((PartitionType) == PARTITION_FAT_12) || \ 350 ((PartitionType) == PARTITION_FAT_16) || \ 351 ((PartitionType) == PARTITION_HUGE) || \ 352 ((PartitionType) == PARTITION_IFS) || \ 353 ((PartitionType) == PARTITION_FAT32) || \ 354 ((PartitionType) == PARTITION_FAT32_XINT13) || \ 355 ((PartitionType) == PARTITION_XINT13)) 356 #endif 357 358 #if(_WIN32_WINNT >= 0x0500) 359 #define GPT_ATTRIBUTE_PLATFORM_REQUIRED 0x00000001 360 #define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY 0x10000000 361 #define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY 0x20000000 362 #define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN 0x40000000 363 #define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER 0x80000000 364 #endif 365 366 #define WMI_DISK_GEOMETRY_GUID \ 367 {0x25007f51, 0x57c2, 0x11d1, {0xa5, 0x28, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10}} 368 369 typedef USHORT BAD_TRACK_NUMBER; 370 typedef USHORT *PBAD_TRACK_NUMBER; 371 372 typedef enum _MEDIA_TYPE { 373 Unknown, 374 F5_1Pt2_512, 375 F3_1Pt44_512, 376 F3_2Pt88_512, 377 F3_20Pt8_512, 378 F3_720_512, 379 F5_360_512, 380 F5_320_512, 381 F5_320_1024, 382 F5_180_512, 383 F5_160_512, 384 RemovableMedia, 385 FixedMedia, 386 F3_120M_512, 387 F3_640_512, 388 F5_640_512, 389 F5_720_512, 390 F3_1Pt2_512, 391 F3_1Pt23_1024, 392 F5_1Pt23_1024, 393 F3_128Mb_512, 394 F3_230Mb_512, 395 F8_256_128, 396 F3_200Mb_512, 397 F3_240M_512, 398 F3_32M_512 399 } MEDIA_TYPE, *PMEDIA_TYPE; 400 401 typedef enum _DETECTION_TYPE { 402 DetectNone, 403 DetectInt13, 404 DetectExInt13 405 } DETECTION_TYPE; 406 407 typedef struct _DISK_INT13_INFO { 408 USHORT DriveSelect; 409 ULONG MaxCylinders; 410 USHORT SectorsPerTrack; 411 USHORT MaxHeads; 412 USHORT NumberDrives; 413 } DISK_INT13_INFO, *PDISK_INT13_INFO; 414 415 typedef struct _DISK_EX_INT13_INFO { 416 USHORT ExBufferSize; 417 USHORT ExFlags; 418 ULONG ExCylinders; 419 ULONG ExHeads; 420 ULONG ExSectorsPerTrack; 421 ULONG64 ExSectorsPerDrive; 422 USHORT ExSectorSize; 423 USHORT ExReserved; 424 } DISK_EX_INT13_INFO, *PDISK_EX_INT13_INFO; 425 426 typedef struct _DISK_DETECTION_INFO { 427 ULONG SizeOfDetectInfo; 428 DETECTION_TYPE DetectionType; 429 _ANONYMOUS_UNION union { 430 _ANONYMOUS_STRUCT struct { 431 DISK_INT13_INFO Int13; 432 DISK_EX_INT13_INFO ExInt13; 433 } DUMMYSTRUCTNAME; 434 } DUMMYUNIONNAME; 435 } DISK_DETECTION_INFO, *PDISK_DETECTION_INFO; 436 437 typedef struct _DISK_GEOMETRY { 438 LARGE_INTEGER Cylinders; 439 MEDIA_TYPE MediaType; 440 ULONG TracksPerCylinder; 441 ULONG SectorsPerTrack; 442 ULONG BytesPerSector; 443 } DISK_GEOMETRY, *PDISK_GEOMETRY; 444 445 typedef struct _DISK_GEOMETRY_EX { 446 DISK_GEOMETRY Geometry; 447 LARGE_INTEGER DiskSize; 448 UCHAR Data[1]; 449 } DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX; 450 451 #if (NTDDI_VERSION < NTDDI_WS03) 452 #define DiskGeometryGetPartition(Geometry) \ 453 ((PDISK_PARTITION_INFO)((Geometry) + 1)) 454 455 #define DiskGeometryGetDetect(Geometry)\ 456 ((PDISK_DETECTION_INFO)(((PBYTE)DiskGeometryGetPartition(Geometry) + \ 457 DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo))) 458 #else 459 #define DiskGeometryGetPartition(Geometry) \ 460 ((PDISK_PARTITION_INFO)((Geometry)->Data)) 461 462 #define DiskGeometryGetDetect(Geometry)\ 463 ((PDISK_DETECTION_INFO)(((ULONG_PTR)DiskGeometryGetPartition(Geometry) + \ 464 DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo))) 465 #endif 466 467 typedef struct _PARTITION_INFORMATION { 468 LARGE_INTEGER StartingOffset; 469 LARGE_INTEGER PartitionLength; 470 ULONG HiddenSectors; 471 ULONG PartitionNumber; 472 UCHAR PartitionType; 473 BOOLEAN BootIndicator; 474 BOOLEAN RecognizedPartition; 475 BOOLEAN RewritePartition; 476 } PARTITION_INFORMATION, *PPARTITION_INFORMATION; 477 478 typedef struct _PARTITION_INFORMATION_GPT { 479 GUID PartitionType; 480 GUID PartitionId; 481 ULONG64 Attributes; 482 WCHAR Name [36]; 483 } PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT; 484 485 typedef enum _PARTITION_STYLE { 486 PARTITION_STYLE_MBR, 487 PARTITION_STYLE_GPT, 488 PARTITION_STYLE_RAW, 489 #ifdef __REACTOS__ 490 /* ReactOS custom partition handlers */ 491 PARTITION_STYLE_BRFR = 128 /* Xbox-BRFR partitioning scheme */ 492 #endif 493 } PARTITION_STYLE; 494 495 typedef struct _DISK_PARTITION_INFO { 496 ULONG SizeOfPartitionInfo; 497 PARTITION_STYLE PartitionStyle; 498 _ANONYMOUS_UNION union { 499 struct { 500 ULONG Signature; 501 ULONG CheckSum; 502 } Mbr; 503 struct { 504 GUID DiskId; 505 } Gpt; 506 } DUMMYUNIONNAME; 507 } DISK_PARTITION_INFO, *PDISK_PARTITION_INFO; 508 509 typedef struct _DISK_PERFORMANCE { 510 LARGE_INTEGER BytesRead; 511 LARGE_INTEGER BytesWritten; 512 LARGE_INTEGER ReadTime; 513 LARGE_INTEGER WriteTime; 514 LARGE_INTEGER IdleTime; 515 ULONG ReadCount; 516 ULONG WriteCount; 517 ULONG QueueDepth; 518 ULONG SplitCount; 519 LARGE_INTEGER QueryTime; 520 ULONG StorageDeviceNumber; 521 WCHAR StorageManagerName[8]; 522 } DISK_PERFORMANCE, *PDISK_PERFORMANCE; 523 524 typedef struct _PARTITION_INFORMATION_MBR { 525 UCHAR PartitionType; 526 BOOLEAN BootIndicator; 527 BOOLEAN RecognizedPartition; 528 ULONG HiddenSectors; 529 } PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR; 530 531 typedef struct _PARTITION_INFORMATION_EX { 532 PARTITION_STYLE PartitionStyle; 533 LARGE_INTEGER StartingOffset; 534 LARGE_INTEGER PartitionLength; 535 ULONG PartitionNumber; 536 BOOLEAN RewritePartition; 537 #if (NTDDI_VERSION >= NTDDI_WIN10_RS3) 538 BOOLEAN IsServicePartition; 539 #endif 540 _ANONYMOUS_UNION union { 541 PARTITION_INFORMATION_MBR Mbr; 542 PARTITION_INFORMATION_GPT Gpt; 543 } DUMMYUNIONNAME; 544 } PARTITION_INFORMATION_EX, *PPARTITION_INFORMATION_EX; 545 546 typedef struct _DRIVE_LAYOUT_INFORMATION { 547 ULONG PartitionCount; 548 ULONG Signature; 549 PARTITION_INFORMATION PartitionEntry[1]; 550 } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; 551 552 typedef struct _DRIVE_LAYOUT_INFORMATION_MBR { 553 ULONG Signature; 554 #if (NTDDI_VERSION >= NTDDI_WIN10_RS1) 555 ULONG CheckSum; 556 #endif 557 } DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR; 558 559 typedef struct _DRIVE_LAYOUT_INFORMATION_GPT { 560 GUID DiskId; 561 LARGE_INTEGER StartingUsableOffset; 562 LARGE_INTEGER UsableLength; 563 ULONG MaxPartitionCount; 564 } DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT; 565 566 typedef struct _DRIVE_LAYOUT_INFORMATION_EX { 567 ULONG PartitionStyle; 568 ULONG PartitionCount; 569 __GNU_EXTENSION union { 570 DRIVE_LAYOUT_INFORMATION_MBR Mbr; 571 DRIVE_LAYOUT_INFORMATION_GPT Gpt; 572 }; 573 PARTITION_INFORMATION_EX PartitionEntry[1]; 574 } DRIVE_LAYOUT_INFORMATION_EX, *PDRIVE_LAYOUT_INFORMATION_EX; 575 576 typedef struct _FORMAT_EX_PARAMETERS { 577 MEDIA_TYPE MediaType; 578 ULONG StartCylinderNumber; 579 ULONG EndCylinderNumber; 580 ULONG StartHeadNumber; 581 ULONG EndHeadNumber; 582 USHORT FormatGapLength; 583 USHORT SectorsPerTrack; 584 USHORT SectorNumber[1]; 585 } FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS; 586 587 typedef struct _FORMAT_PARAMETERS { 588 MEDIA_TYPE MediaType; 589 ULONG StartCylinderNumber; 590 ULONG EndCylinderNumber; 591 ULONG StartHeadNumber; 592 ULONG EndHeadNumber; 593 } FORMAT_PARAMETERS, *PFORMAT_PARAMETERS; 594 595 typedef struct _GET_LENGTH_INFORMATION { 596 LARGE_INTEGER Length; 597 } GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION; 598 599 typedef struct _REASSIGN_BLOCKS { 600 USHORT Reserved; 601 USHORT Count; 602 ULONG BlockNumber[1]; 603 } REASSIGN_BLOCKS, *PREASSIGN_BLOCKS; 604 605 typedef struct _REASSIGN_BLOCKS_EX { 606 USHORT Reserved; 607 USHORT Count; 608 LARGE_INTEGER BlockNumber[1]; 609 } REASSIGN_BLOCKS_EX, *PREASSIGN_BLOCKS_EX; 610 611 typedef struct _SET_PARTITION_INFORMATION { 612 UCHAR PartitionType; 613 } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION; 614 615 typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR; 616 typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT; 617 618 typedef struct _SET_PARTITION_INFORMATION_EX { 619 PARTITION_STYLE PartitionStyle; 620 _ANONYMOUS_UNION union { 621 SET_PARTITION_INFORMATION_MBR Mbr; 622 SET_PARTITION_INFORMATION_GPT Gpt; 623 } DUMMYUNIONNAME; 624 } SET_PARTITION_INFORMATION_EX, *PSET_PARTITION_INFORMATION_EX; 625 626 typedef struct _VERIFY_INFORMATION { 627 LARGE_INTEGER StartingOffset; 628 ULONG Length; 629 } VERIFY_INFORMATION, *PVERIFY_INFORMATION; 630 631 /* GETVERSIONINPARAMS.fCapabilities constants */ 632 #define CAP_ATA_ID_CMD 1 633 #define CAP_ATAPI_ID_CMD 2 634 #define CAP_SMART_CMD 4 635 636 typedef struct _GETVERSIONINPARAMS { 637 UCHAR bVersion; 638 UCHAR bRevision; 639 UCHAR bReserved; 640 UCHAR bIDEDeviceMap; 641 ULONG fCapabilities; 642 ULONG dwReserved[4]; 643 } GETVERSIONINPARAMS, *PGETVERSIONINPARAMS, *LPGETVERSIONINPARAMS; 644 645 /* IDEREGS.bCommandReg constants */ 646 #define ATAPI_ID_CMD 0xA1 647 #define ID_CMD 0xEC 648 #define SMART_CMD 0xB0 649 650 #define SMART_CYL_LOW 0x4F 651 #define SMART_CYL_HI 0xC2 652 653 typedef struct _IDEREGS { 654 UCHAR bFeaturesReg; 655 UCHAR bSectorCountReg; 656 UCHAR bSectorNumberReg; 657 UCHAR bCylLowReg; 658 UCHAR bCylHighReg; 659 UCHAR bDriveHeadReg; 660 UCHAR bCommandReg; 661 UCHAR bReserved; 662 } IDEREGS, *PIDEREGS, *LPIDEREGS; 663 664 #include <pshpack1.h> 665 typedef struct _SENDCMDINPARAMS { 666 ULONG cBufferSize; 667 IDEREGS irDriveRegs; 668 UCHAR bDriveNumber; 669 UCHAR bReserved[3]; 670 ULONG dwReserved[4]; 671 UCHAR bBuffer[1]; 672 } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS; 673 #include <poppack.h> 674 675 /* DRIVERSTATUS.bDriverError constants */ 676 #define SMART_NO_ERROR 0 677 #define SMART_IDE_ERROR 1 678 #define SMART_INVALID_FLAG 2 679 #define SMART_INVALID_COMMAND 3 680 #define SMART_INVALID_BUFFER 4 681 #define SMART_INVALID_DRIVE 5 682 #define SMART_INVALID_IOCTL 6 683 #define SMART_ERROR_NO_MEM 7 684 #define SMART_INVALID_REGISTER 8 685 #define SMART_NOT_SUPPORTED 9 686 #define SMART_NO_IDE_DEVICE 10 687 688 #define SMART_OFFLINE_ROUTINE_OFFLINE 0 689 #define SMART_SHORT_SELFTEST_OFFLINE 1 690 #define SMART_EXTENDED_SELFTEST_OFFLINE 2 691 #define SMART_ABORT_OFFLINE_SELFTEST 127 692 #define SMART_SHORT_SELFTEST_CAPTIVE 129 693 #define SMART_EXTENDED_SELFTEST_CAPTIVE 130 694 695 typedef struct _DRIVERSTATUS { 696 UCHAR bDriverError; 697 UCHAR bIDEError; 698 UCHAR bReserved[2]; 699 ULONG dwReserved[2]; 700 } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS; 701 702 #define READ_ATTRIBUTE_BUFFER_SIZE 512 703 #define IDENTIFY_BUFFER_SIZE 512 704 #define READ_THRESHOLD_BUFFER_SIZE 512 705 #define SMART_LOG_SECTOR_SIZE 512 706 707 #include <pshpack1.h> 708 typedef struct _SENDCMDOUTPARAMS { 709 ULONG cBufferSize; 710 DRIVERSTATUS DriverStatus; 711 UCHAR bBuffer[1]; 712 } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS; 713 #include <poppack.h> 714 715 #define READ_ATTRIBUTES 0xD0 716 #define READ_THRESHOLDS 0xD1 717 #define ENABLE_DISABLE_AUTOSAVE 0xD2 718 #define SAVE_ATTRIBUTE_VALUES 0xD3 719 #define EXECUTE_OFFLINE_DIAGS 0xD4 720 #define SMART_READ_LOG 0xD5 721 #define SMART_WRITE_LOG 0xd6 722 #define ENABLE_SMART 0xD8 723 #define DISABLE_SMART 0xD9 724 #define RETURN_SMART_STATUS 0xDA 725 #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB 726 727 typedef struct _MAPPED_ADDRESS { 728 struct _MAPPED_ADDRESS *NextMappedAddress; 729 PVOID MappedAddress; 730 ULONG NumberOfBytes; 731 LARGE_INTEGER IoAddress; 732 ULONG BusNumber; 733 } MAPPED_ADDRESS, *PMAPPED_ADDRESS; 734 735 736 737 #if(_WIN32_WINNT >= 0x0500) 738 739 typedef struct _CREATE_DISK_GPT 740 { 741 GUID DiskId; 742 ULONG MaxPartitionCount; 743 } CREATE_DISK_GPT, *PCREATE_DISK_GPT; 744 745 typedef struct _CREATE_DISK_MBR 746 { 747 ULONG Signature; 748 } CREATE_DISK_MBR, *PCREATE_DISK_MBR; 749 750 751 typedef struct _CREATE_DISK 752 { 753 PARTITION_STYLE PartitionStyle; 754 union { 755 CREATE_DISK_MBR Mbr; 756 CREATE_DISK_GPT Gpt; 757 }; 758 } CREATE_DISK, *PCREATE_DISK; 759 760 761 typedef enum { 762 EqualPriority, 763 KeepPrefetchedData, 764 KeepReadData 765 } DISK_CACHE_RETENTION_PRIORITY; 766 767 typedef enum _DISK_WRITE_CACHE_STATE { 768 DiskWriteCacheNormal, 769 DiskWriteCacheForceDisable, 770 DiskWriteCacheDisableNotSupported 771 } DISK_WRITE_CACHE_STATE, *PDISK_WRITE_CACHE_STATE; 772 773 774 typedef struct _DISK_CACHE_INFORMATION 775 { 776 BOOLEAN ParametersSavable; 777 BOOLEAN ReadCacheEnabled; 778 BOOLEAN WriteCacheEnabled; 779 DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; 780 DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; 781 USHORT DisablePrefetchTransferLength; 782 BOOLEAN PrefetchScalar; 783 union { 784 struct { 785 USHORT Minimum; 786 USHORT Maximum; 787 USHORT MaximumBlocks; 788 } ScalarPrefetch; 789 790 struct { 791 USHORT Minimum; 792 USHORT Maximum; 793 } BlockPrefetch; 794 }; 795 796 } DISK_CACHE_INFORMATION, *PDISK_CACHE_INFORMATION; 797 798 typedef struct _DISK_GROW_PARTITION { 799 ULONG PartitionNumber; 800 LARGE_INTEGER BytesToGrow; 801 } DISK_GROW_PARTITION, *PDISK_GROW_PARTITION; 802 #endif 803 804 // for IOCTL_DISK_CONTROLLER_NUMBER 805 806 typedef struct _DISK_CONTROLLER_NUMBER { 807 ULONG ControllerNumber; 808 ULONG DiskNumber; 809 } DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER; 810 811 // for IOCTL_DISK_COPY_DATA 812 813 typedef struct _DISK_COPY_DATA_PARAMETERS { 814 LARGE_INTEGER SourceOffset; 815 LARGE_INTEGER DestinationOffset; 816 LARGE_INTEGER CopyLength; 817 ULONGLONG Reserved; 818 } DISK_COPY_DATA_PARAMETERS, *PDISK_COPY_DATA_PARAMETERS; 819 820 // for IOCTL_DISK_GET_CACHE_SETTING and IOCTL_DISK_SET_CACHE_SETTING 821 822 typedef enum _DISK_CACHE_STATE { 823 DiskCacheNormal, 824 DiskCacheWriteThroughNotSupported, 825 DiskCacheModifyUnsuccessful 826 } DISK_CACHE_STATE, *PDISK_CACHE_STATE; 827 828 typedef struct _DISK_CACHE_SETTING { 829 ULONG Version; 830 DISK_CACHE_STATE State; 831 BOOLEAN IsPowerProtected; 832 } DISK_CACHE_SETTING, *PDISK_CACHE_SETTING; 833 834 #if (NTDDI_VERSION >= NTDDI_VISTA) 835 836 // for IOCTL_DISK_GET_PARTITION_ATTRIBUTES and IOCTL_DISK_SET_PARTITION_ATTRIBUTES 837 838 typedef struct _GET_PARTITION_ATTRIBUTES { 839 ULONG Version; 840 ULONG Reserved1; 841 ULONGLONG Attributes; 842 } GET_PARTITION_ATTRIBUTES, *PGET_PARTITION_ATTRIBUTES; 843 844 typedef struct _SET_PARTITION_ATTRIBUTES { 845 ULONG Version; 846 BOOLEAN Persist; 847 BOOLEAN Reserved1[3]; 848 ULONGLONG Attributes; 849 ULONGLONG AttributesMask; 850 } SET_PARTITION_ATTRIBUTES, *PSET_PARTITION_ATTRIBUTES; 851 852 // for IOCTL_DISK_GET_DISK_ATTRIBUTES and IOCTL_DISK_SET_DISK_ATTRIBUTES 853 854 #define DISK_ATTRIBUTE_OFFLINE 0x0000000000000001 855 #define DISK_ATTRIBUTE_READ_ONLY 0x0000000000000002 856 #define DISK_ATTRIBUTE_HIDDEN 0x0000000000000004 857 #define DISK_ATTRIBUTE_MAINTENANCE 0x0000000000000008 858 #define DISK_ATTRIBUTE_SPACES_BYPASS 0x0000000000000010 859 860 typedef struct _GET_DISK_ATTRIBUTES { 861 ULONG Version; 862 ULONG Reserved1; 863 ULONGLONG Attributes; 864 } GET_DISK_ATTRIBUTES, *PGET_DISK_ATTRIBUTES; 865 866 typedef struct _SET_DISK_ATTRIBUTES { 867 ULONG Version; 868 BOOLEAN Persist; 869 BOOLEAN RelinquishOwnership; 870 BOOLEAN Reserved1[2]; 871 ULONGLONG Attributes; 872 ULONGLONG AttributesMask; 873 GUID Owner; 874 } SET_DISK_ATTRIBUTES, *PSET_DISK_ATTRIBUTES; 875 876 877 // for IOCTL_DISK_GET_SAN_SETTINGS and IOCTL_DISK_SET_SAN_SETTINGS 878 879 typedef enum _DISK_SAN_POLICY { 880 DiskSanPolicyUnknown, 881 DiskSanPolicyOnline, 882 DiskSanPolicyOfflineShared, 883 DiskSanPolicyOffline, 884 DiskSanPolicyOfflineInternal, 885 DiskSanPolicyMax 886 } DISK_SAN_POLICY, *PDISK_SAN_POLICY; 887 888 typedef struct _DISK_SAN_SETTINGS { 889 ULONG Version; 890 DISK_SAN_POLICY SanPolicy; 891 } DISK_SAN_SETTINGS, *PDISK_SAN_SETTINGS; 892 893 // for IOCTL_DISK_GET_SNAPSHOT_INFO and IOCTL_DISK_SET_SNAPSHOT_INFO 894 typedef enum _DISK_SNAPSHOT_STATE { 895 DiskSnapshotNormalDisk, 896 DiskSnapshotSnapshotCheckRequired, 897 DiskSnapshotPreSnapshot, 898 DiskSnapshotSnapshotDisk 899 } DISK_SNAPSHOT_STATE, *PDISK_SNAPSHOT_STATE; 900 901 typedef struct _DISK_SNAPSHOT_INFO { 902 ULONG Version; 903 DISK_SNAPSHOT_STATE State; 904 GUID SnapshotSetId; 905 GUID SnapshotId; 906 GUID LunId; 907 LARGE_INTEGER CreationTimeStamp; 908 ULONG ImportCount; 909 ULONG Flags; 910 ULONG AdditionalDataSize; 911 UCHAR AdditionalData[ANYSIZE_ARRAY]; 912 } DISK_SNAPSHOT_INFO, *PDISK_SNAPSHOT_INFO; 913 #endif /* NTDDI_VERSION >= NTDDI_VISTA */ 914 915 #if (NTDDI_VERSION >= NTDDI_WIN8) 916 917 // for IOCTL_DISK_GET_CLUSTER_INFO and IOCTL_DISK_SET_CLUSTER_INFO 918 919 #define DISK_CLUSTER_FLAG_ENABLED 0x0000000000000001 920 #define DISK_CLUSTER_FLAG_CSV 0x0000000000000002 921 #define DISK_CLUSTER_FLAG_IN_MAINTENANCE 0x0000000000000004 922 #define DISK_CLUSTER_FLAG_PNP_ARRIVAL_COMPLETE 0x0000000000000008 923 924 typedef struct _DISK_CLUSTER_INFO { 925 ULONG Version; 926 ULONGLONG Flags; 927 ULONGLONG FlagsMask; 928 BOOLEAN Notify; 929 } DISK_CLUSTER_INFO, *PDISK_CLUSTER_INFO; 930 931 // for IOCTL_DISK_GET_PERFORMANCE_INFO 932 933 typedef enum _DISK_PERFORMANCE_TYPE { 934 DiskPerformanceTypeAllPriority, 935 DiskPerformanceTypeNonLowPriority, 936 DiskPerformanceTypeMax 937 } DISK_PERFORMANCE_TYPE, *PDISK_PERFORMANCE_TYPE; 938 939 typedef struct _DISK_PERFORMANCE_PARAMETERS { 940 ULONG Version; 941 DISK_PERFORMANCE_TYPE Type; 942 } DISK_PERFORMANCE_PARAMETERS, *PDISK_PERFORMANCE_PARAMETERS; 943 944 typedef struct _DISK_PERFORMANCE_INFO { 945 ULONG Version; 946 DISK_PERFORMANCE_TYPE Type; 947 LARGE_INTEGER QueryTime; 948 LARGE_INTEGER BytesRead; 949 LARGE_INTEGER BytesWritten; 950 LARGE_INTEGER ReadTime; 951 LARGE_INTEGER WriteTime; 952 LARGE_INTEGER FlushTime; 953 LARGE_INTEGER IdleTime; 954 ULONG ReadCount; 955 ULONG WriteCount; 956 ULONG FlushCount; 957 ULONG QueueDepth; 958 ULONG SplitCount; 959 } DISK_PERFORMANCE_INFO, *PDISK_PERFORMANCE_INFO; 960 961 #endif /* NTDDI_VERSION >= NTDDI_WIN8 */ 962 963 964 #ifdef __cplusplus 965 } 966 #endif 967 968 #endif /* _NTDDDISK_H_ */ 969