2 * Windows API header module
4 * Translated from MinGW Windows headers
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)
10 module core
.sys
.windows
.winioctl
;
14 // FIXME: check types of some constants
16 import core
.sys
.windows
.basetyps
, core
.sys
.windows
.windef
;
19 HIST_NO_OF_BUCKETS
= 24,
20 HISTOGRAM_BUCKET_SIZE
= HISTOGRAM_BUCKET
.sizeof
,
21 DISK_HISTOGRAM_SIZE
= DISK_HISTOGRAM
.sizeof
;
23 alias DWORD DEVICE_TYPE
;
28 FILE_DEVICE_CD_ROM_FILE_SYSTEM
,
29 FILE_DEVICE_CONTROLLER
,
33 FILE_DEVICE_DISK_FILE_SYSTEM
,
34 FILE_DEVICE_FILE_SYSTEM
,
35 FILE_DEVICE_INPORT_PORT
,
41 FILE_DEVICE_MULTI_UNC_PROVIDER
,
42 FILE_DEVICE_NAMED_PIPE
,
44 FILE_DEVICE_NETWORK_BROWSER
,
45 FILE_DEVICE_NETWORK_FILE_SYSTEM
,
47 FILE_DEVICE_PARALLEL_PORT
,
48 FILE_DEVICE_PHYSICAL_NETCARD
,
51 FILE_DEVICE_SERIAL_MOUSE_PORT
,
52 FILE_DEVICE_SERIAL_PORT
,
57 FILE_DEVICE_TAPE_FILE_SYSTEM
,
58 FILE_DEVICE_TRANSPORT
,
61 FILE_DEVICE_VIRTUAL_DISK
,
64 FILE_DEVICE_8042_PORT
,
65 FILE_DEVICE_NETWORK_REDIRECTOR
,
67 FILE_DEVICE_BUS_EXTENDER
,
70 FILE_DEVICE_MASS_STORAGE
,
74 FILE_DEVICE_SMARTCARD
,
77 FILE_DEVICE_FULLSCREEN_VIDEO
,
78 FILE_DEVICE_DFS_FILE_SYSTEM
,
79 FILE_DEVICE_DFS_VOLUME
,
82 FILE_DEVICE_KSEC
// = 57
94 FILE_SPECIAL_ACCESS
= 0,
100 * tttttttt tttttttt aaffffff ffffffmm
103 #define CTL_CODE(t, f, m, a) (((t)<<16)|((a)<<14)|((f)<<2)|(m))
106 template CTL_CODE_T(DEVICE_TYPE t
, uint f
, uint m
, uint a
) {
107 enum DWORD CTL_CODE_T
= (t
<< 16) |
(a
<< 14) |
(f
<< 2) | m
;
110 DEVICE_TYPE
DEVICE_TYPE_FROM_CTL_CODE(DWORD c
) {
111 return (c
& 0xFFFF0000) >> 16;
115 IOCTL_STORAGE_BASE
= FILE_DEVICE_MASS_STORAGE
,
116 IOCTL_DISK_BASE
= FILE_DEVICE_DISK
,
117 IOCTL_VOLUME_BASE
= 'V';
120 IOCTL_STORAGE_CHECK_VERIFY
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0200, METHOD_BUFFERED
, FILE_READ_ACCESS
),
121 IOCTL_STORAGE_CHECK_VERIFY2
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0200, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
122 IOCTL_STORAGE_MEDIA_REMOVAL
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0201, METHOD_BUFFERED
, FILE_READ_ACCESS
),
123 IOCTL_STORAGE_EJECT_MEDIA
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0202, METHOD_BUFFERED
, FILE_READ_ACCESS
),
124 IOCTL_STORAGE_LOAD_MEDIA
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0203, METHOD_BUFFERED
, FILE_READ_ACCESS
),
125 IOCTL_STORAGE_LOAD_MEDIA2
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0203, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
126 IOCTL_STORAGE_RESERVE
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0204, METHOD_BUFFERED
, FILE_READ_ACCESS
),
127 IOCTL_STORAGE_RELEASE
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0205, METHOD_BUFFERED
, FILE_READ_ACCESS
),
128 IOCTL_STORAGE_FIND_NEW_DEVICES
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0206, METHOD_BUFFERED
, FILE_READ_ACCESS
),
129 IOCTL_STORAGE_EJECTION_CONTROL
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0250, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
130 IOCTL_STORAGE_MCN_CONTROL
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0251, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
131 IOCTL_STORAGE_GET_MEDIA_TYPES
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0300, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
132 IOCTL_STORAGE_GET_MEDIA_TYPES_EX
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0301, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
133 IOCTL_STORAGE_RESET_BUS
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0400, METHOD_BUFFERED
, FILE_READ_ACCESS
),
134 IOCTL_STORAGE_RESET_DEVICE
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0401, METHOD_BUFFERED
, FILE_READ_ACCESS
),
135 IOCTL_STORAGE_GET_DEVICE_NUMBER
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0420, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
136 IOCTL_STORAGE_PREDICT_FAILURE
= CTL_CODE_T
!(IOCTL_STORAGE_BASE
, 0x0440, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
138 IOCTL_DISK_GET_DRIVE_GEOMETRY
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
139 IOCTL_DISK_GET_PARTITION_INFO
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 1, METHOD_BUFFERED
, FILE_READ_ACCESS
),
140 IOCTL_DISK_SET_PARTITION_INFO
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 2, METHOD_BUFFERED
, FILE_READ_ACCESS|FILE_WRITE_ACCESS
),
141 IOCTL_DISK_GET_DRIVE_LAYOUT
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 3, METHOD_BUFFERED
, FILE_READ_ACCESS
),
142 IOCTL_DISK_SET_DRIVE_LAYOUT
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 4, METHOD_BUFFERED
, FILE_READ_ACCESS|FILE_WRITE_ACCESS
),
143 IOCTL_DISK_VERIFY
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 5, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
144 IOCTL_DISK_FORMAT_TRACKS
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 6, METHOD_BUFFERED
, FILE_READ_ACCESS|FILE_WRITE_ACCESS
),
145 IOCTL_DISK_REASSIGN_BLOCKS
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 7, METHOD_BUFFERED
, FILE_READ_ACCESS|FILE_WRITE_ACCESS
),
146 IOCTL_DISK_PERFORMANCE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 8, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
147 IOCTL_DISK_IS_WRITABLE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 9, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
148 IOCTL_DISK_LOGGING
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 10, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
149 IOCTL_DISK_FORMAT_TRACKS_EX
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 11, METHOD_BUFFERED
, FILE_READ_ACCESS|FILE_WRITE_ACCESS
),
150 IOCTL_DISK_HISTOGRAM_STRUCTURE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 12, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
151 IOCTL_DISK_HISTOGRAM_DATA
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 13, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
152 IOCTL_DISK_HISTOGRAM_RESET
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 14, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
153 IOCTL_DISK_REQUEST_STRUCTURE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 15, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
154 IOCTL_DISK_REQUEST_DATA
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 16, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
155 IOCTL_DISK_GET_PARTITION_INFO_EX
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x12, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
156 IOCTL_DISK_SET_PARTITION_INFO_EX
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x13, METHOD_BUFFERED
, FILE_READ_ACCESS | FILE_WRITE_ACCESS
),
157 IOCTL_DISK_GET_DRIVE_LAYOUT_EX
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x14, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
158 IOCTL_DISK_SET_DRIVE_LAYOUT_EX
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x15, METHOD_BUFFERED
, FILE_READ_ACCESS | FILE_WRITE_ACCESS
),
159 IOCTL_DISK_CREATE_DISK
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x16, METHOD_BUFFERED
, FILE_READ_ACCESS | FILE_WRITE_ACCESS
),
160 IOCTL_DISK_GET_LENGTH_INFO
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x17, METHOD_BUFFERED
, FILE_READ_ACCESS
),
161 IOCTL_DISK_PERFORMANCE_OFF
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x18, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
162 IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x28, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
163 IOCTL_DISK_GROW_PARTITION
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x34, METHOD_BUFFERED
, FILE_READ_ACCESS | FILE_WRITE_ACCESS
),
164 IOCTL_DISK_GET_CACHE_INFORMATION
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x35, METHOD_BUFFERED
, FILE_READ_ACCESS
),
165 IOCTL_DISK_SET_CACHE_INFORMATION
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x36, METHOD_BUFFERED
, FILE_READ_ACCESS | FILE_WRITE_ACCESS
),
166 IOCTL_DISK_DELETE_DRIVE_LAYOUT
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x40, METHOD_BUFFERED
, FILE_READ_ACCESS | FILE_WRITE_ACCESS
),
167 IOCTL_DISK_UPDATE_PROPERTIES
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x50, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
168 IOCTL_DISK_CHECK_VERIFY
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x200, METHOD_BUFFERED
, FILE_READ_ACCESS
),
169 IOCTL_DISK_MEDIA_REMOVAL
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x201, METHOD_BUFFERED
, FILE_READ_ACCESS
),
170 IOCTL_DISK_EJECT_MEDIA
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x202, METHOD_BUFFERED
, FILE_READ_ACCESS
),
171 IOCTL_DISK_LOAD_MEDIA
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x203, METHOD_BUFFERED
, FILE_READ_ACCESS
),
172 IOCTL_DISK_RESERVE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x204, METHOD_BUFFERED
, FILE_READ_ACCESS
),
173 IOCTL_DISK_RELEASE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x205, METHOD_BUFFERED
, FILE_READ_ACCESS
),
174 IOCTL_DISK_FIND_NEW_DEVICES
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x206, METHOD_BUFFERED
, FILE_READ_ACCESS
),
175 IOCTL_DISK_REMOVE_DEVICE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x207, METHOD_BUFFERED
, FILE_READ_ACCESS
),
176 IOCTL_DISK_GET_MEDIA_TYPES
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x300, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
177 IOCTL_DISK_UPDATE_DRIVE_SIZE
= CTL_CODE_T
!(IOCTL_DISK_BASE
, 0x0032, METHOD_BUFFERED
, FILE_READ_ACCESS | FILE_WRITE_ACCESS
),
178 IOCTL_SERIAL_LSRMST_INSERT
= CTL_CODE_T
!(FILE_DEVICE_SERIAL_PORT
, 31, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
180 IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
= CTL_CODE_T
!(IOCTL_VOLUME_BASE
, 0, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
181 IOCTL_VOLUME_IS_CLUSTERED
= CTL_CODE_T
!(IOCTL_VOLUME_BASE
, 12, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
183 FSCTL_LOCK_VOLUME
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 6, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
184 FSCTL_UNLOCK_VOLUME
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 7, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
185 FSCTL_DISMOUNT_VOLUME
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 8, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
186 FSCTL_MOUNT_DBLS_VOLUME
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 13, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
187 FSCTL_GET_COMPRESSION
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 15, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
188 FSCTL_SET_COMPRESSION
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 16, METHOD_BUFFERED
, FILE_READ_DATA|FILE_WRITE_DATA
),
189 FSCTL_READ_COMPRESSION
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 17, METHOD_NEITHER
, FILE_READ_DATA
),
190 FSCTL_WRITE_COMPRESSION
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 18, METHOD_NEITHER
, FILE_WRITE_DATA
),
191 FSCTL_GET_NTFS_VOLUME_DATA
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 25, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
192 FSCTL_GET_VOLUME_BITMAP
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 27, METHOD_NEITHER
, FILE_ANY_ACCESS
),
193 FSCTL_GET_RETRIEVAL_POINTERS
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 28, METHOD_NEITHER
, FILE_ANY_ACCESS
),
194 FSCTL_MOVE_FILE
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 29, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
195 FSCTL_GET_REPARSE_POINT
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 42, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
196 FSCTL_SET_REPARSE_POINT
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 41, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
197 FSCTL_DELETE_REPARSE_POINT
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 43, METHOD_BUFFERED
, FILE_ANY_ACCESS
),
198 FSCTL_SET_SPARSE
= CTL_CODE_T
!(FILE_DEVICE_FILE_SYSTEM
, 49, METHOD_BUFFERED
, FILE_SPECIAL_ACCESS
),
202 PARTITION_ENTRY_UNUSED
,
209 PARTITION_IFS
, // = 0x07
210 PARTITION_FAT32
= 0x0B,
211 PARTITION_FAT32_XINT13
= 0x0C,
212 PARTITION_XINT13
= 0x0E,
213 PARTITION_XINT13_EXTENDED
= 0x0F,
214 PARTITION_PREP
= 0x41,
215 PARTITION_LDM
= 0x42,
216 PARTITION_UNIX
= 0x63
220 PARTITION_NTFT
= 0x80,
224 SERIAL_LSRMST_ESCAPE
,
225 SERIAL_LSRMST_LSR_DATA
,
226 SERIAL_LSRMST_LSR_NODATA
,
237 alias WORD BAD_TRACK_NUMBER
;
238 alias WORD
* PBAD_TRACK_NUMBER
;
241 RequestSize
, RequestLocation
245 LARGE_INTEGER StartValue
;
246 LARGE_INTEGER Length
;
248 alias BIN_RANGE
* PBIN_RANGE
;
254 alias BIN_COUNT
* PBIN_COUNT
;
258 BIN_COUNT _BinCounts
;
260 BIN_COUNT
* BinCounts() return { return &_BinCounts
; }
262 alias BIN_RESULTS
* PBIN_RESULTS
;
264 enum PARTITION_STYLE
{
270 struct CREATE_DISK_GPT
{
272 DWORD MaxPartitionCount
;
274 alias CREATE_DISK_GPT
* PCREATE_DISK_GPT
;
276 struct CREATE_DISK_MBR
{
279 alias CREATE_DISK_MBR
* PCREATE_DISK_MBR
;
282 PARTITION_STYLE PartitionStyle
;
288 alias CREATE_DISK
* PCREATE_DISK
;
290 enum DISK_CACHE_RETENTION_PRIORITY
{
296 struct DISK_CACHE_INFORMATION
{
297 BOOLEAN ParametersSavable
;
298 BOOLEAN ReadCacheEnabled
;
299 BOOLEAN WriteCacheEnabled
;
300 DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority
;
301 DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority
;
302 WORD DisablePrefetchTransferLength
;
303 BOOLEAN PrefetchScalar
;
305 struct _ScalarPrefetch
{
310 _ScalarPrefetch ScalarPrefetch
;
311 struct _BlockPrefetch
{
315 _BlockPrefetch BlockPrefetch
;
318 alias DISK_CACHE_INFORMATION
* PDISK_CACHE_INFORMATION
;
320 enum DETECTION_TYPE
{
326 struct DISK_INT13_INFO
{
329 WORD SectorsPerTrack
;
333 alias DISK_INT13_INFO
* PDISK_INT13_INFO
;
335 struct DISK_EX_INT13_INFO
{
340 DWORD ExSectorsPerTrack
;
341 DWORD64 ExSectorsPerDrive
;
345 alias DISK_EX_INT13_INFO
* PDISK_EX_INT13_INFO
;
347 struct DISK_DETECTION_INFO
{
348 DWORD SizeOfDetectInfo
;
349 DETECTION_TYPE DetectionType
;
350 DISK_INT13_INFO Int13
;
351 DISK_EX_INT13_INFO ExInt13
;
353 alias DISK_DETECTION_INFO
* PDISK_DETECTION_INFO
;
383 alias MEDIA_TYPE
* PMEDIA_TYPE
;
385 struct DISK_GEOMETRY
{
386 LARGE_INTEGER Cylinders
;
387 MEDIA_TYPE MediaType
;
388 DWORD TracksPerCylinder
;
389 DWORD SectorsPerTrack
;
390 DWORD BytesPerSector
;
392 alias DISK_GEOMETRY
* PDISK_GEOMETRY
;
394 struct DISK_GEOMETRY_EX
{
395 DISK_GEOMETRY Geometry
;
396 LARGE_INTEGER DiskSize
;
399 BYTE
* Data() return { return &_Data
; }
401 alias DISK_GEOMETRY_EX
* PDISK_GEOMETRY_EX
;
403 struct DISK_GROW_PARTITION
{
404 DWORD PartitionNumber
;
405 LARGE_INTEGER BytesToGrow
;
407 alias DISK_GROW_PARTITION
* PDISK_GROW_PARTITION
;
409 struct DISK_PARTITION_INFO
{
410 DWORD SizeOfPartitionInfo
;
411 PARTITION_STYLE PartitionStyle
;
421 alias DISK_PARTITION_INFO
* PDISK_PARTITION_INFO
;
423 struct DISK_PERFORMANCE
{
424 LARGE_INTEGER BytesRead
;
425 LARGE_INTEGER BytesWritten
;
426 LARGE_INTEGER ReadTime
;
427 LARGE_INTEGER WriteTime
;
432 alias DISK_PERFORMANCE
* PDISK_PERFORMANCE
;
435 LARGE_INTEGER ByteOffset
;
436 LARGE_INTEGER StartTime
;
437 LARGE_INTEGER EndTime
;
438 PVOID VirtualAddress
;
443 alias DISK_RECORD
* PDISK_RECORD
;
445 struct DISK_LOGGING
{
450 alias DISK_LOGGING
* PDISK_LOGGING
;
452 struct DISKQUOTA_USER_INFORMATION
{
454 LONGLONG QuotaThreshold
;
457 alias DISKQUOTA_USER_INFORMATION
* PDISKQUOTA_USER_INFORMATION
;
459 struct FORMAT_PARAMETERS
{
460 MEDIA_TYPE MediaType
;
461 DWORD StartCylinderNumber
;
462 DWORD EndCylinderNumber
;
463 DWORD StartHeadNumber
;
466 alias FORMAT_PARAMETERS
* PFORMAT_PARAMETERS
;
468 struct FORMAT_EX_PARAMETERS
{
469 MEDIA_TYPE MediaType
;
470 DWORD StartCylinderNumber
;
471 DWORD EndCylinderNumber
;
472 DWORD StartHeadNumber
;
474 WORD FormatGapLength
;
475 WORD SectorsPerTrack
;
478 WORD
* SectorNumber() return { return &_SectorNumber
; }
480 alias FORMAT_EX_PARAMETERS
* PFORMAT_EX_PARAMETERS
;
482 struct GET_LENGTH_INFORMATION
{
483 LARGE_INTEGER Length
;
486 struct HISTOGRAM_BUCKET
{
490 alias HISTOGRAM_BUCKET
* PHISTOGRAM_BUCKET
;
492 struct DISK_HISTOGRAM
{
493 LARGE_INTEGER DiskSize
;
496 LARGE_INTEGER Average
;
497 LARGE_INTEGER AverageRead
;
498 LARGE_INTEGER AverageWrite
;
503 PHISTOGRAM_BUCKET Histogram
;
505 alias DISK_HISTOGRAM
* PDISK_HISTOGRAM
;
509 LARGE_INTEGER StartingOffset
;
510 LARGE_INTEGER ExtentLength
;
512 alias DISK_EXTENT
* PDISK_EXTENT
;
514 struct VOLUME_DISK_EXTENTS
{
515 DWORD NumberOfDiskExtents
;
516 DISK_EXTENT _Extents
;
518 DISK_EXTENT
* Extents() return { return &_Extents
; }
520 alias VOLUME_DISK_EXTENTS
* PVOLUME_DISK_EXTENTS
;
522 struct PARTITION_INFORMATION
{
523 LARGE_INTEGER StartingOffset
;
524 LARGE_INTEGER PartitionLength
;
526 DWORD PartitionNumber
;
528 BOOLEAN BootIndicator
;
529 BOOLEAN RecognizedPartition
;
530 BOOLEAN RewritePartition
;
532 alias PARTITION_INFORMATION
* PPARTITION_INFORMATION
;
534 struct DRIVE_LAYOUT_INFORMATION
{
535 DWORD PartitionCount
;
537 PARTITION_INFORMATION _PartitionEntry
;
539 PARTITION_INFORMATION
* PartitionEntry() return { return &_PartitionEntry
; }
541 alias DRIVE_LAYOUT_INFORMATION
* PDRIVE_LAYOUT_INFORMATION
;
543 struct DRIVE_LAYOUT_INFORMATION_GPT
{
545 LARGE_INTEGER StartingUsableOffset
;
546 LARGE_INTEGER UsableLength
;
547 ULONG MaxPartitionCount
;
549 alias DRIVE_LAYOUT_INFORMATION_GPT
* PDRIVE_LAYOUT_INFORMATION_GPT
;
551 struct DRIVE_LAYOUT_INFORMATION_MBR
{
554 alias DRIVE_LAYOUT_INFORMATION_MBR
* PDRIVE_LAYOUT_INFORMATION_MBR
;
556 struct PARTITION_INFORMATION_MBR
{
558 BOOLEAN BootIndicator
;
559 BOOLEAN RecognizedPartition
;
563 struct PARTITION_INFORMATION_GPT
{
570 struct PARTITION_INFORMATION_EX
{
571 PARTITION_STYLE PartitionStyle
;
572 LARGE_INTEGER StartingOffset
;
573 LARGE_INTEGER PartitionLength
;
574 DWORD PartitionNumber
;
575 BOOLEAN RewritePartition
;
577 PARTITION_INFORMATION_MBR Mbr
;
578 PARTITION_INFORMATION_GPT Gpt
;
582 struct DRIVE_LAYOUT_INFORMATION_EX
{
583 DWORD PartitionStyle
;
584 DWORD PartitionCount
;
586 DRIVE_LAYOUT_INFORMATION_MBR Mbr
;
587 DRIVE_LAYOUT_INFORMATION_GPT Gpt
;
589 PARTITION_INFORMATION_EX _PartitionEntry
;
591 PARTITION_INFORMATION_EX
* PartitionEntry() return { return &_PartitionEntry
; }
593 alias DRIVE_LAYOUT_INFORMATION_EX
* PDRIVE_LAYOUT_INFORMATION_EX
;
595 struct MOVE_FILE_DATA
{
597 LARGE_INTEGER StartingVcn
;
598 LARGE_INTEGER StartingLcn
;
601 alias MOVE_FILE_DATA
* PMOVE_FILE_DATA
;
606 BIN_RANGE _BinsRanges
;
608 BIN_RANGE
* BinsRanges() return { return &_BinsRanges
; }
610 alias PERF_BIN
* PPERF_BIN
;
612 struct PREVENT_MEDIA_REMOVAL
{
613 BOOLEAN PreventMediaRemoval
;
615 alias PREVENT_MEDIA_REMOVAL
* PPREVENT_MEDIA_REMOVAL
;
617 struct RETRIEVAL_POINTERS_BUFFER
{
619 LARGE_INTEGER StartingVcn
;
620 // In MinGW, this is declared as struct { ... } Extents[1];
622 LARGE_INTEGER NextVcn
;
627 Extent
* Extents() return { return &_Extents
; }
629 alias RETRIEVAL_POINTERS_BUFFER
* PRETRIEVAL_POINTERS_BUFFER
;
631 struct REASSIGN_BLOCKS
{
636 DWORD
* BlockNumber() return { return &_BlockNumber
; }
638 alias REASSIGN_BLOCKS
* PREASSIGN_BLOCKS
;
640 struct SET_PARTITION_INFORMATION
{
643 alias SET_PARTITION_INFORMATION
* PSET_PARTITION_INFORMATION
;
645 struct STARTING_LCN_INPUT_BUFFER
{
646 LARGE_INTEGER StartingLcn
;
648 alias STARTING_LCN_INPUT_BUFFER
* PSTARTING_LCN_INPUT_BUFFER
;
650 struct STARTING_VCN_INPUT_BUFFER
{
651 LARGE_INTEGER StartingVcn
;
653 alias STARTING_VCN_INPUT_BUFFER
* PSTARTING_VCN_INPUT_BUFFER
;
655 struct VERIFY_INFORMATION
{
656 LARGE_INTEGER StartingOffset
;
659 alias VERIFY_INFORMATION
* PVERIFY_INFORMATION
;
661 struct VOLUME_BITMAP_BUFFER
{
662 LARGE_INTEGER StartingLcn
;
663 LARGE_INTEGER BitmapSize
;
666 BYTE
* Buffer() return { return &_Buffer
; }
668 alias VOLUME_BITMAP_BUFFER
* PVOLUME_BITMAP_BUFFER
;
670 struct NTFS_VOLUME_DATA_BUFFER
{
671 LARGE_INTEGER VolumeSerialNumber
;
672 LARGE_INTEGER NumberSectors
;
673 LARGE_INTEGER TotalClusters
;
674 LARGE_INTEGER FreeClusters
;
675 LARGE_INTEGER TotalReserved
;
676 DWORD BytesPerSector
;
677 DWORD BytesPerCluster
;
678 DWORD BytesPerFileRecordSegment
;
679 DWORD ClustersPerFileRecordSegment
;
680 LARGE_INTEGER MftValidDataLength
;
681 LARGE_INTEGER MftStartLcn
;
682 LARGE_INTEGER Mft2StartLcn
;
683 LARGE_INTEGER MftZoneStart
;
684 LARGE_INTEGER MftZoneEnd
;
686 alias NTFS_VOLUME_DATA_BUFFER
* PNTFS_VOLUME_DATA_BUFFER
;
689 bool IsRecognizedPartition(BYTE t
) {
690 return ((t
& PARTITION_NTFT
)
691 && ((t
& (-1 - VALID_NTFT
)) == PARTITION_FAT_12
692 ||
(t
& (-1 - VALID_NTFT
)) == PARTITION_FAT_16
693 ||
(t
& (-1 - VALID_NTFT
)) == PARTITION_IFS
694 ||
(t
& (-1 - VALID_NTFT
)) == PARTITION_HUGE
695 ||
(t
& (-1 - VALID_NTFT
)) == PARTITION_FAT32
696 ||
(t
& (-1 - VALID_NTFT
)) == PARTITION_FAT32_XINT13
697 ||
(t
& (-1 - VALID_NTFT
)) == PARTITION_XINT13
))
698 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_FAT_12
699 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_FAT_16
700 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_IFS
701 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_HUGE
702 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_FAT32
703 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_FAT32_XINT13
704 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_XINT13
;
707 bool IsContainerPartition(BYTE t
) {
708 return ((t
& PARTITION_NTFT
)
709 && ((t
& (-1 - VALID_NTFT
)) == PARTITION_EXTENDED
710 ||
(t
& (-1 - VALID_NTFT
)) == PARTITION_XINT13_EXTENDED
))
711 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_EXTENDED
712 ||
(t
& (-1 - PARTITION_NTFT
)) == PARTITION_XINT13_EXTENDED
;