1 /** 2 * Windows API header module 3 * 4 * Translated from MinGW Windows headers 5 * 6 * Authors: Stewart Gordon 7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 8 * Source: $(DRUNTIMESRC core/sys/windows/_winioctl.d) 9 */ 10 /// Automatically imported and edited from the druntime module 11 /// core.sys.windows.winioctl for the auto-generated win32 package. 12 module win32.winioctl; 13 //version (Windows): 14 @system: 15 16 // FIXME: check types of some constants 17 18 import win32.basetyps, win32.windef; 19 20 enum size_t 21 HIST_NO_OF_BUCKETS = 24, 22 HISTOGRAM_BUCKET_SIZE = HISTOGRAM_BUCKET.sizeof, 23 DISK_HISTOGRAM_SIZE = DISK_HISTOGRAM.sizeof; 24 25 alias DWORD DEVICE_TYPE; 26 27 enum : DEVICE_TYPE { 28 FILE_DEVICE_BEEP = 1, 29 FILE_DEVICE_CD_ROM, 30 FILE_DEVICE_CD_ROM_FILE_SYSTEM, 31 FILE_DEVICE_CONTROLLER, 32 FILE_DEVICE_DATALINK, 33 FILE_DEVICE_DFS, 34 FILE_DEVICE_DISK, 35 FILE_DEVICE_DISK_FILE_SYSTEM, 36 FILE_DEVICE_FILE_SYSTEM, 37 FILE_DEVICE_INPORT_PORT, 38 FILE_DEVICE_KEYBOARD, 39 FILE_DEVICE_MAILSLOT, 40 FILE_DEVICE_MIDI_IN, 41 FILE_DEVICE_MIDI_OUT, 42 FILE_DEVICE_MOUSE, 43 FILE_DEVICE_MULTI_UNC_PROVIDER, 44 FILE_DEVICE_NAMED_PIPE, 45 FILE_DEVICE_NETWORK, 46 FILE_DEVICE_NETWORK_BROWSER, 47 FILE_DEVICE_NETWORK_FILE_SYSTEM, 48 FILE_DEVICE_NULL, 49 FILE_DEVICE_PARALLEL_PORT, 50 FILE_DEVICE_PHYSICAL_NETCARD, 51 FILE_DEVICE_PRINTER, 52 FILE_DEVICE_SCANNER, 53 FILE_DEVICE_SERIAL_MOUSE_PORT, 54 FILE_DEVICE_SERIAL_PORT, 55 FILE_DEVICE_SCREEN, 56 FILE_DEVICE_SOUND, 57 FILE_DEVICE_STREAMS, 58 FILE_DEVICE_TAPE, 59 FILE_DEVICE_TAPE_FILE_SYSTEM, 60 FILE_DEVICE_TRANSPORT, 61 FILE_DEVICE_UNKNOWN, 62 FILE_DEVICE_VIDEO, 63 FILE_DEVICE_VIRTUAL_DISK, 64 FILE_DEVICE_WAVE_IN, 65 FILE_DEVICE_WAVE_OUT, 66 FILE_DEVICE_8042_PORT, 67 FILE_DEVICE_NETWORK_REDIRECTOR, 68 FILE_DEVICE_BATTERY, 69 FILE_DEVICE_BUS_EXTENDER, 70 FILE_DEVICE_MODEM, 71 FILE_DEVICE_VDM, 72 FILE_DEVICE_MASS_STORAGE, 73 FILE_DEVICE_SMB, 74 FILE_DEVICE_KS, 75 FILE_DEVICE_CHANGER, 76 FILE_DEVICE_SMARTCARD, 77 FILE_DEVICE_ACPI, 78 FILE_DEVICE_DVD, 79 FILE_DEVICE_FULLSCREEN_VIDEO, 80 FILE_DEVICE_DFS_FILE_SYSTEM, 81 FILE_DEVICE_DFS_VOLUME, 82 FILE_DEVICE_SERENUM, 83 FILE_DEVICE_TERMSRV, 84 FILE_DEVICE_KSEC // = 57 85 } 86 87 enum { 88 METHOD_BUFFERED, 89 METHOD_IN_DIRECT, 90 METHOD_OUT_DIRECT, 91 METHOD_NEITHER 92 } 93 94 enum { 95 FILE_ANY_ACCESS, 96 FILE_SPECIAL_ACCESS = 0, 97 FILE_READ_ACCESS, 98 FILE_WRITE_ACCESS 99 } 100 101 /* Bit pattern: 102 * tttttttt tttttttt aaffffff ffffffmm 103 */ 104 /+ 105 #define CTL_CODE(t, f, m, a) (((t)<<16)|((a)<<14)|((f)<<2)|(m)) 106 +/ 107 108 template CTL_CODE_T(DEVICE_TYPE t, uint f, uint m, uint a) { 109 enum DWORD CTL_CODE_T = (t << 16) | (a << 14) | (f << 2) | m; 110 } 111 112 DEVICE_TYPE DEVICE_TYPE_FROM_CTL_CODE()(DWORD c) { 113 return (c & 0xFFFF0000) >> 16; 114 } 115 116 enum DEVICE_TYPE 117 IOCTL_STORAGE_BASE = FILE_DEVICE_MASS_STORAGE, 118 IOCTL_DISK_BASE = FILE_DEVICE_DISK, 119 IOCTL_VOLUME_BASE = 'V'; 120 121 enum : DWORD { 122 IOCTL_STORAGE_CHECK_VERIFY = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS), 123 IOCTL_STORAGE_CHECK_VERIFY2 = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS), 124 IOCTL_STORAGE_MEDIA_REMOVAL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS), 125 IOCTL_STORAGE_EJECT_MEDIA = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS), 126 IOCTL_STORAGE_LOAD_MEDIA = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS), 127 IOCTL_STORAGE_LOAD_MEDIA2 = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS), 128 IOCTL_STORAGE_RESERVE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS), 129 IOCTL_STORAGE_RELEASE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS), 130 IOCTL_STORAGE_FIND_NEW_DEVICES = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS), 131 IOCTL_STORAGE_EJECTION_CONTROL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS), 132 IOCTL_STORAGE_MCN_CONTROL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS), 133 IOCTL_STORAGE_GET_MEDIA_TYPES = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS), 134 IOCTL_STORAGE_GET_MEDIA_TYPES_EX = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS), 135 IOCTL_STORAGE_RESET_BUS = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS), 136 IOCTL_STORAGE_RESET_DEVICE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS), 137 IOCTL_STORAGE_GET_DEVICE_NUMBER = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS), 138 IOCTL_STORAGE_PREDICT_FAILURE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS), 139 140 IOCTL_DISK_GET_DRIVE_GEOMETRY = CTL_CODE_T!(IOCTL_DISK_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS), 141 IOCTL_DISK_GET_PARTITION_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 1, METHOD_BUFFERED, FILE_READ_ACCESS), 142 IOCTL_DISK_SET_PARTITION_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), 143 IOCTL_DISK_GET_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS), 144 IOCTL_DISK_SET_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 4, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), 145 IOCTL_DISK_VERIFY = CTL_CODE_T!(IOCTL_DISK_BASE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS), 146 IOCTL_DISK_FORMAT_TRACKS = CTL_CODE_T!(IOCTL_DISK_BASE, 6, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), 147 IOCTL_DISK_REASSIGN_BLOCKS = CTL_CODE_T!(IOCTL_DISK_BASE, 7, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), 148 IOCTL_DISK_PERFORMANCE = CTL_CODE_T!(IOCTL_DISK_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS), 149 IOCTL_DISK_IS_WRITABLE = CTL_CODE_T!(IOCTL_DISK_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS), 150 IOCTL_DISK_LOGGING = CTL_CODE_T!(IOCTL_DISK_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS), 151 IOCTL_DISK_FORMAT_TRACKS_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 11, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), 152 IOCTL_DISK_HISTOGRAM_STRUCTURE = CTL_CODE_T!(IOCTL_DISK_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS), 153 IOCTL_DISK_HISTOGRAM_DATA = CTL_CODE_T!(IOCTL_DISK_BASE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS), 154 IOCTL_DISK_HISTOGRAM_RESET = CTL_CODE_T!(IOCTL_DISK_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS), 155 IOCTL_DISK_REQUEST_STRUCTURE = CTL_CODE_T!(IOCTL_DISK_BASE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS), 156 IOCTL_DISK_REQUEST_DATA = CTL_CODE_T!(IOCTL_DISK_BASE, 16, METHOD_BUFFERED, FILE_ANY_ACCESS), 157 IOCTL_DISK_GET_PARTITION_INFO_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x12, METHOD_BUFFERED, FILE_ANY_ACCESS), 158 IOCTL_DISK_SET_PARTITION_INFO_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), 159 IOCTL_DISK_GET_DRIVE_LAYOUT_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x14, METHOD_BUFFERED, FILE_ANY_ACCESS), 160 IOCTL_DISK_SET_DRIVE_LAYOUT_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x15, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), 161 IOCTL_DISK_CREATE_DISK = CTL_CODE_T!(IOCTL_DISK_BASE, 0x16, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), 162 IOCTL_DISK_GET_LENGTH_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 0x17, METHOD_BUFFERED, FILE_READ_ACCESS), 163 IOCTL_DISK_PERFORMANCE_OFF = CTL_CODE_T!(IOCTL_DISK_BASE, 0x18, METHOD_BUFFERED, FILE_ANY_ACCESS), 164 IOCTL_DISK_GET_DRIVE_GEOMETRY_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x28, METHOD_BUFFERED, FILE_ANY_ACCESS), 165 IOCTL_DISK_GROW_PARTITION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x34, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), 166 IOCTL_DISK_GET_CACHE_INFORMATION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x35, METHOD_BUFFERED, FILE_READ_ACCESS), 167 IOCTL_DISK_SET_CACHE_INFORMATION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x36, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), 168 IOCTL_DISK_DELETE_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 0x40, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), 169 IOCTL_DISK_UPDATE_PROPERTIES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x50, METHOD_BUFFERED, FILE_ANY_ACCESS), 170 IOCTL_DISK_CHECK_VERIFY = CTL_CODE_T!(IOCTL_DISK_BASE, 0x200, METHOD_BUFFERED, FILE_READ_ACCESS), 171 IOCTL_DISK_MEDIA_REMOVAL = CTL_CODE_T!(IOCTL_DISK_BASE, 0x201, METHOD_BUFFERED, FILE_READ_ACCESS), 172 IOCTL_DISK_EJECT_MEDIA = CTL_CODE_T!(IOCTL_DISK_BASE, 0x202, METHOD_BUFFERED, FILE_READ_ACCESS), 173 IOCTL_DISK_LOAD_MEDIA = CTL_CODE_T!(IOCTL_DISK_BASE, 0x203, METHOD_BUFFERED, FILE_READ_ACCESS), 174 IOCTL_DISK_RESERVE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x204, METHOD_BUFFERED, FILE_READ_ACCESS), 175 IOCTL_DISK_RELEASE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x205, METHOD_BUFFERED, FILE_READ_ACCESS), 176 IOCTL_DISK_FIND_NEW_DEVICES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x206, METHOD_BUFFERED, FILE_READ_ACCESS), 177 IOCTL_DISK_REMOVE_DEVICE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x207, METHOD_BUFFERED, FILE_READ_ACCESS), 178 IOCTL_DISK_GET_MEDIA_TYPES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x300, METHOD_BUFFERED, FILE_ANY_ACCESS), 179 IOCTL_DISK_UPDATE_DRIVE_SIZE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), 180 IOCTL_SERIAL_LSRMST_INSERT = CTL_CODE_T!(FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS), 181 182 IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = CTL_CODE_T!(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS), 183 IOCTL_VOLUME_IS_CLUSTERED = CTL_CODE_T!(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS), 184 185 FSCTL_LOCK_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS), 186 FSCTL_UNLOCK_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS), 187 FSCTL_DISMOUNT_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS), 188 FSCTL_MOUNT_DBLS_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 13, METHOD_BUFFERED, FILE_ANY_ACCESS), 189 FSCTL_GET_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS), 190 FSCTL_SET_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA|FILE_WRITE_DATA), 191 FSCTL_READ_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 17, METHOD_NEITHER, FILE_READ_DATA), 192 FSCTL_WRITE_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 18, METHOD_NEITHER, FILE_WRITE_DATA), 193 FSCTL_GET_NTFS_VOLUME_DATA = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS), 194 FSCTL_GET_VOLUME_BITMAP = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS), 195 FSCTL_GET_RETRIEVAL_POINTERS = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS), 196 FSCTL_MOVE_FILE = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS), 197 FSCTL_GET_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS), 198 FSCTL_SET_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_ANY_ACCESS), 199 FSCTL_DELETE_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_ANY_ACCESS), 200 FSCTL_SET_SPARSE = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS), 201 } 202 203 enum : BYTE { 204 PARTITION_ENTRY_UNUSED, 205 PARTITION_FAT_12, 206 PARTITION_XENIX_1, 207 PARTITION_XENIX_2, 208 PARTITION_FAT_16, 209 PARTITION_EXTENDED, 210 PARTITION_HUGE, 211 PARTITION_IFS, // = 0x07 212 PARTITION_FAT32 = 0x0B, 213 PARTITION_FAT32_XINT13 = 0x0C, 214 PARTITION_XINT13 = 0x0E, 215 PARTITION_XINT13_EXTENDED = 0x0F, 216 PARTITION_PREP = 0x41, 217 PARTITION_LDM = 0x42, 218 PARTITION_UNIX = 0x63 219 } 220 221 enum BYTE 222 PARTITION_NTFT = 0x80, 223 VALID_NTFT = 0xC0; 224 225 enum { 226 SERIAL_LSRMST_ESCAPE, 227 SERIAL_LSRMST_LSR_DATA, 228 SERIAL_LSRMST_LSR_NODATA, 229 SERIAL_LSRMST_MST 230 } 231 232 enum { 233 DISK_LOGGING_START, 234 DISK_LOGGING_STOP, 235 DISK_LOGGING_DUMP, 236 DISK_BINNING 237 } 238 239 alias WORD BAD_TRACK_NUMBER; 240 alias WORD* PBAD_TRACK_NUMBER; 241 242 enum BIN_TYPES { 243 RequestSize, RequestLocation 244 } 245 246 struct BIN_RANGE { 247 LARGE_INTEGER StartValue; 248 LARGE_INTEGER Length; 249 } 250 alias BIN_RANGE* PBIN_RANGE; 251 252 struct BIN_COUNT { 253 BIN_RANGE BinRange; 254 DWORD BinCount; 255 } 256 alias BIN_COUNT* PBIN_COUNT; 257 258 struct BIN_RESULTS { 259 DWORD NumberOfBins; 260 BIN_COUNT _BinCounts; 261 262 BIN_COUNT* BinCounts() return { return &_BinCounts; } 263 } 264 alias BIN_RESULTS* PBIN_RESULTS; 265 266 enum PARTITION_STYLE { 267 PARTITION_STYLE_MBR, 268 PARTITION_STYLE_GPT, 269 PARTITION_STYLE_RAW 270 } 271 272 struct CREATE_DISK_GPT { 273 GUID DiskId; 274 DWORD MaxPartitionCount; 275 } 276 alias CREATE_DISK_GPT* PCREATE_DISK_GPT; 277 278 struct CREATE_DISK_MBR { 279 DWORD Signature; 280 } 281 alias CREATE_DISK_MBR* PCREATE_DISK_MBR; 282 283 struct CREATE_DISK { 284 PARTITION_STYLE PartitionStyle; 285 union { 286 CREATE_DISK_MBR Mbr; 287 CREATE_DISK_GPT Gpt; 288 } 289 } 290 alias CREATE_DISK* PCREATE_DISK; 291 292 enum DISK_CACHE_RETENTION_PRIORITY { 293 EqualPriority, 294 KeepPrefetchedData, 295 KeepReadData 296 } 297 298 struct DISK_CACHE_INFORMATION { 299 BOOLEAN ParametersSavable; 300 BOOLEAN ReadCacheEnabled; 301 BOOLEAN WriteCacheEnabled; 302 DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; 303 DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; 304 WORD DisablePrefetchTransferLength; 305 BOOLEAN PrefetchScalar; 306 union { 307 struct _ScalarPrefetch { 308 WORD Minimum; 309 WORD Maximum; 310 WORD MaximumBlocks; 311 } 312 _ScalarPrefetch ScalarPrefetch; 313 struct _BlockPrefetch { 314 WORD Minimum; 315 WORD Maximum; 316 } 317 _BlockPrefetch BlockPrefetch; 318 } 319 } 320 alias DISK_CACHE_INFORMATION* PDISK_CACHE_INFORMATION; 321 322 enum DETECTION_TYPE { 323 DetectNone, 324 DetectInt13, 325 DetectExInt13 326 } 327 328 struct DISK_INT13_INFO { 329 WORD DriveSelect; 330 DWORD MaxCylinders; 331 WORD SectorsPerTrack; 332 WORD MaxHeads; 333 WORD NumberDrives; 334 } 335 alias DISK_INT13_INFO* PDISK_INT13_INFO; 336 337 struct DISK_EX_INT13_INFO { 338 WORD ExBufferSize; 339 WORD ExFlags; 340 DWORD ExCylinders; 341 DWORD ExHeads; 342 DWORD ExSectorsPerTrack; 343 DWORD64 ExSectorsPerDrive; 344 WORD ExSectorSize; 345 WORD ExReserved; 346 } 347 alias DISK_EX_INT13_INFO* PDISK_EX_INT13_INFO; 348 349 struct DISK_DETECTION_INFO { 350 DWORD SizeOfDetectInfo; 351 DETECTION_TYPE DetectionType; 352 DISK_INT13_INFO Int13; 353 DISK_EX_INT13_INFO ExInt13; 354 } 355 alias DISK_DETECTION_INFO* PDISK_DETECTION_INFO; 356 357 enum MEDIA_TYPE { 358 Unknown, 359 F5_1Pt2_512, 360 F3_1Pt44_512, 361 F3_2Pt88_512, 362 F3_20Pt8_512, 363 F3_720_512, 364 F5_360_512, 365 F5_320_512, 366 F5_320_1024, 367 F5_180_512, 368 F5_160_512, 369 RemovableMedia, 370 FixedMedia, 371 F3_120M_512, 372 F3_640_512, 373 F5_640_512, 374 F5_720_512, 375 F3_1Pt2_512, 376 F3_1Pt23_1024, 377 F5_1Pt23_1024, 378 F3_128Mb_512, 379 F3_230Mb_512, 380 F8_256_128, 381 F3_200Mb_512, 382 F3_240M_512, 383 F3_32M_512 384 } 385 alias MEDIA_TYPE* PMEDIA_TYPE; 386 387 struct DISK_GEOMETRY { 388 LARGE_INTEGER Cylinders; 389 MEDIA_TYPE MediaType; 390 DWORD TracksPerCylinder; 391 DWORD SectorsPerTrack; 392 DWORD BytesPerSector; 393 } 394 alias DISK_GEOMETRY* PDISK_GEOMETRY; 395 396 struct DISK_GEOMETRY_EX { 397 DISK_GEOMETRY Geometry; 398 LARGE_INTEGER DiskSize; 399 BYTE _Data; 400 401 BYTE* Data() return { return &_Data; } 402 } 403 alias DISK_GEOMETRY_EX* PDISK_GEOMETRY_EX; 404 405 struct DISK_GROW_PARTITION { 406 DWORD PartitionNumber; 407 LARGE_INTEGER BytesToGrow; 408 } 409 alias DISK_GROW_PARTITION* PDISK_GROW_PARTITION; 410 411 struct DISK_PARTITION_INFO { 412 DWORD SizeOfPartitionInfo; 413 PARTITION_STYLE PartitionStyle; 414 union { 415 //struct { 416 DWORD Signature; 417 //} Mbr; 418 //struct { 419 GUID DiskId; 420 //} Gpt; 421 } 422 } 423 alias DISK_PARTITION_INFO* PDISK_PARTITION_INFO; 424 425 struct DISK_PERFORMANCE { 426 LARGE_INTEGER BytesRead; 427 LARGE_INTEGER BytesWritten; 428 LARGE_INTEGER ReadTime; 429 LARGE_INTEGER WriteTime; 430 DWORD ReadCount; 431 DWORD WriteCount; 432 DWORD QueueDepth; 433 } 434 alias DISK_PERFORMANCE* PDISK_PERFORMANCE; 435 436 struct DISK_RECORD { 437 LARGE_INTEGER ByteOffset; 438 LARGE_INTEGER StartTime; 439 LARGE_INTEGER EndTime; 440 PVOID VirtualAddress; 441 DWORD NumberOfBytes; 442 BYTE DeviceNumber; 443 BOOLEAN ReadRequest; 444 } 445 alias DISK_RECORD* PDISK_RECORD; 446 447 struct DISK_LOGGING { 448 BYTE Function; 449 PVOID BufferAddress; 450 DWORD BufferSize; 451 } 452 alias DISK_LOGGING* PDISK_LOGGING; 453 454 struct DISKQUOTA_USER_INFORMATION { 455 LONGLONG QuotaUsed; 456 LONGLONG QuotaThreshold; 457 LONGLONG QuotaLimit; 458 } 459 alias DISKQUOTA_USER_INFORMATION* PDISKQUOTA_USER_INFORMATION; 460 461 struct FORMAT_PARAMETERS { 462 MEDIA_TYPE MediaType; 463 DWORD StartCylinderNumber; 464 DWORD EndCylinderNumber; 465 DWORD StartHeadNumber; 466 DWORD EndHeadNumber; 467 } 468 alias FORMAT_PARAMETERS* PFORMAT_PARAMETERS; 469 470 struct FORMAT_EX_PARAMETERS { 471 MEDIA_TYPE MediaType; 472 DWORD StartCylinderNumber; 473 DWORD EndCylinderNumber; 474 DWORD StartHeadNumber; 475 DWORD EndHeadNumber; 476 WORD FormatGapLength; 477 WORD SectorsPerTrack; 478 WORD _SectorNumber; 479 480 WORD* SectorNumber() return { return &_SectorNumber; } 481 } 482 alias FORMAT_EX_PARAMETERS* PFORMAT_EX_PARAMETERS; 483 484 struct GET_LENGTH_INFORMATION { 485 LARGE_INTEGER Length; 486 } 487 488 struct HISTOGRAM_BUCKET { 489 DWORD Reads; 490 DWORD Writes; 491 } 492 alias HISTOGRAM_BUCKET* PHISTOGRAM_BUCKET; 493 494 struct DISK_HISTOGRAM { 495 LARGE_INTEGER DiskSize; 496 LARGE_INTEGER Start; 497 LARGE_INTEGER End; 498 LARGE_INTEGER Average; 499 LARGE_INTEGER AverageRead; 500 LARGE_INTEGER AverageWrite; 501 DWORD Granularity; 502 DWORD Size; 503 DWORD ReadCount; 504 DWORD WriteCount; 505 PHISTOGRAM_BUCKET Histogram; 506 } 507 alias DISK_HISTOGRAM* PDISK_HISTOGRAM; 508 509 struct DISK_EXTENT { 510 DWORD DiskNumber; 511 LARGE_INTEGER StartingOffset; 512 LARGE_INTEGER ExtentLength; 513 } 514 alias DISK_EXTENT* PDISK_EXTENT; 515 516 struct VOLUME_DISK_EXTENTS { 517 DWORD NumberOfDiskExtents; 518 DISK_EXTENT _Extents; 519 520 DISK_EXTENT* Extents() return { return &_Extents; } 521 } 522 alias VOLUME_DISK_EXTENTS* PVOLUME_DISK_EXTENTS; 523 524 struct PARTITION_INFORMATION { 525 LARGE_INTEGER StartingOffset; 526 LARGE_INTEGER PartitionLength; 527 DWORD HiddenSectors; 528 DWORD PartitionNumber; 529 BYTE PartitionType; 530 BOOLEAN BootIndicator; 531 BOOLEAN RecognizedPartition; 532 BOOLEAN RewritePartition; 533 } 534 alias PARTITION_INFORMATION* PPARTITION_INFORMATION; 535 536 struct DRIVE_LAYOUT_INFORMATION { 537 DWORD PartitionCount; 538 DWORD Signature; 539 PARTITION_INFORMATION _PartitionEntry; 540 541 PARTITION_INFORMATION* PartitionEntry() return { return &_PartitionEntry; } 542 } 543 alias DRIVE_LAYOUT_INFORMATION* PDRIVE_LAYOUT_INFORMATION; 544 545 struct DRIVE_LAYOUT_INFORMATION_GPT { 546 GUID DiskId; 547 LARGE_INTEGER StartingUsableOffset; 548 LARGE_INTEGER UsableLength; 549 ULONG MaxPartitionCount; 550 } 551 alias DRIVE_LAYOUT_INFORMATION_GPT* PDRIVE_LAYOUT_INFORMATION_GPT; 552 553 struct DRIVE_LAYOUT_INFORMATION_MBR { 554 ULONG Signature; 555 } 556 alias DRIVE_LAYOUT_INFORMATION_MBR* PDRIVE_LAYOUT_INFORMATION_MBR; 557 558 struct PARTITION_INFORMATION_MBR { 559 BYTE PartitionType; 560 BOOLEAN BootIndicator; 561 BOOLEAN RecognizedPartition; 562 DWORD HiddenSectors; 563 } 564 565 struct PARTITION_INFORMATION_GPT { 566 GUID PartitionType; 567 GUID PartitionId; 568 DWORD64 Attributes; 569 WCHAR[36] Name = 0; 570 } 571 572 struct PARTITION_INFORMATION_EX { 573 PARTITION_STYLE PartitionStyle; 574 LARGE_INTEGER StartingOffset; 575 LARGE_INTEGER PartitionLength; 576 DWORD PartitionNumber; 577 BOOLEAN RewritePartition; 578 union { 579 PARTITION_INFORMATION_MBR Mbr; 580 PARTITION_INFORMATION_GPT Gpt; 581 } 582 } 583 584 struct DRIVE_LAYOUT_INFORMATION_EX { 585 DWORD PartitionStyle; 586 DWORD PartitionCount; 587 union { 588 DRIVE_LAYOUT_INFORMATION_MBR Mbr; 589 DRIVE_LAYOUT_INFORMATION_GPT Gpt; 590 } 591 PARTITION_INFORMATION_EX _PartitionEntry; 592 593 PARTITION_INFORMATION_EX* PartitionEntry() return { return &_PartitionEntry; } 594 } 595 alias DRIVE_LAYOUT_INFORMATION_EX* PDRIVE_LAYOUT_INFORMATION_EX; 596 597 struct MOVE_FILE_DATA { 598 HANDLE FileHandle; 599 LARGE_INTEGER StartingVcn; 600 LARGE_INTEGER StartingLcn; 601 DWORD ClusterCount; 602 } 603 alias MOVE_FILE_DATA* PMOVE_FILE_DATA; 604 605 struct PERF_BIN { 606 DWORD NumberOfBins; 607 DWORD TypeOfBin; 608 BIN_RANGE _BinsRanges; 609 610 BIN_RANGE* BinsRanges() return { return &_BinsRanges; } 611 } 612 alias PERF_BIN* PPERF_BIN; 613 614 struct PREVENT_MEDIA_REMOVAL { 615 BOOLEAN PreventMediaRemoval; 616 } 617 alias PREVENT_MEDIA_REMOVAL* PPREVENT_MEDIA_REMOVAL; 618 619 struct RETRIEVAL_POINTERS_BUFFER { 620 DWORD ExtentCount; 621 LARGE_INTEGER StartingVcn; 622 // In MinGW, this is declared as struct { ... } Extents[1]; 623 struct Extent { 624 LARGE_INTEGER NextVcn; 625 LARGE_INTEGER Lcn; 626 } 627 Extent _Extents; 628 629 Extent* Extents() return { return &_Extents; } 630 } 631 alias RETRIEVAL_POINTERS_BUFFER* PRETRIEVAL_POINTERS_BUFFER; 632 633 struct REASSIGN_BLOCKS { 634 WORD Reserved; 635 WORD Count; 636 DWORD _BlockNumber; 637 638 DWORD* BlockNumber() return { return &_BlockNumber; } 639 } 640 alias REASSIGN_BLOCKS* PREASSIGN_BLOCKS; 641 642 struct SET_PARTITION_INFORMATION { 643 BYTE PartitionType; 644 } 645 alias SET_PARTITION_INFORMATION* PSET_PARTITION_INFORMATION; 646 647 struct STARTING_LCN_INPUT_BUFFER { 648 LARGE_INTEGER StartingLcn; 649 } 650 alias STARTING_LCN_INPUT_BUFFER* PSTARTING_LCN_INPUT_BUFFER; 651 652 struct STARTING_VCN_INPUT_BUFFER { 653 LARGE_INTEGER StartingVcn; 654 } 655 alias STARTING_VCN_INPUT_BUFFER* PSTARTING_VCN_INPUT_BUFFER; 656 657 struct VERIFY_INFORMATION { 658 LARGE_INTEGER StartingOffset; 659 DWORD Length; 660 } 661 alias VERIFY_INFORMATION* PVERIFY_INFORMATION; 662 663 struct VOLUME_BITMAP_BUFFER { 664 LARGE_INTEGER StartingLcn; 665 LARGE_INTEGER BitmapSize; 666 BYTE _Buffer; 667 668 BYTE* Buffer() return { return &_Buffer; } 669 } 670 alias VOLUME_BITMAP_BUFFER* PVOLUME_BITMAP_BUFFER; 671 672 struct NTFS_VOLUME_DATA_BUFFER { 673 LARGE_INTEGER VolumeSerialNumber; 674 LARGE_INTEGER NumberSectors; 675 LARGE_INTEGER TotalClusters; 676 LARGE_INTEGER FreeClusters; 677 LARGE_INTEGER TotalReserved; 678 DWORD BytesPerSector; 679 DWORD BytesPerCluster; 680 DWORD BytesPerFileRecordSegment; 681 DWORD ClustersPerFileRecordSegment; 682 LARGE_INTEGER MftValidDataLength; 683 LARGE_INTEGER MftStartLcn; 684 LARGE_INTEGER Mft2StartLcn; 685 LARGE_INTEGER MftZoneStart; 686 LARGE_INTEGER MftZoneEnd; 687 } 688 alias NTFS_VOLUME_DATA_BUFFER* PNTFS_VOLUME_DATA_BUFFER; 689 690 691 bool IsRecognizedPartition()(BYTE t) { 692 return ((t & PARTITION_NTFT) 693 && ((t & (-1 - VALID_NTFT)) == PARTITION_FAT_12 694 || (t & (-1 - VALID_NTFT)) == PARTITION_FAT_16 695 || (t & (-1 - VALID_NTFT)) == PARTITION_IFS 696 || (t & (-1 - VALID_NTFT)) == PARTITION_HUGE 697 || (t & (-1 - VALID_NTFT)) == PARTITION_FAT32 698 || (t & (-1 - VALID_NTFT)) == PARTITION_FAT32_XINT13 699 || (t & (-1 - VALID_NTFT)) == PARTITION_XINT13)) 700 || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT_12 701 || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT_16 702 || (t & (-1 - PARTITION_NTFT)) == PARTITION_IFS 703 || (t & (-1 - PARTITION_NTFT)) == PARTITION_HUGE 704 || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT32 705 || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT32_XINT13 706 || (t & (-1 - PARTITION_NTFT)) == PARTITION_XINT13; 707 } 708 709 bool IsContainerPartition()(BYTE t) { 710 return ((t & PARTITION_NTFT) 711 && ((t & (-1 - VALID_NTFT)) == PARTITION_EXTENDED 712 || (t & (-1 - VALID_NTFT)) == PARTITION_XINT13_EXTENDED)) 713 || (t & (-1 - PARTITION_NTFT)) == PARTITION_EXTENDED 714 || (t & (-1 - PARTITION_NTFT)) == PARTITION_XINT13_EXTENDED; 715 }