| /** | |
| * Windows API header module | |
| * | |
| * Translated from MinGW Windows headers | |
| * | |
| * Authors: Stewart Gordon | |
| * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) | |
| * Source: $(DRUNTIMESRC core/sys/windows/_winioctl.d) | |
| */ | |
| module core.sys.windows.winioctl; | |
| version (Windows): | |
| // FIXME: check types of some constants | |
| import core.sys.windows.basetyps, core.sys.windows.windef; | |
| enum size_t | |
| HIST_NO_OF_BUCKETS = 24, | |
| HISTOGRAM_BUCKET_SIZE = HISTOGRAM_BUCKET.sizeof, | |
| DISK_HISTOGRAM_SIZE = DISK_HISTOGRAM.sizeof; | |
| alias DEVICE_TYPE = DWORD; | |
| enum : DEVICE_TYPE { | |
| FILE_DEVICE_BEEP = 1, | |
| FILE_DEVICE_CD_ROM, | |
| FILE_DEVICE_CD_ROM_FILE_SYSTEM, | |
| FILE_DEVICE_CONTROLLER, | |
| FILE_DEVICE_DATALINK, | |
| FILE_DEVICE_DFS, | |
| FILE_DEVICE_DISK, | |
| FILE_DEVICE_DISK_FILE_SYSTEM, | |
| FILE_DEVICE_FILE_SYSTEM, | |
| FILE_DEVICE_INPORT_PORT, | |
| FILE_DEVICE_KEYBOARD, | |
| FILE_DEVICE_MAILSLOT, | |
| FILE_DEVICE_MIDI_IN, | |
| FILE_DEVICE_MIDI_OUT, | |
| FILE_DEVICE_MOUSE, | |
| FILE_DEVICE_MULTI_UNC_PROVIDER, | |
| FILE_DEVICE_NAMED_PIPE, | |
| FILE_DEVICE_NETWORK, | |
| FILE_DEVICE_NETWORK_BROWSER, | |
| FILE_DEVICE_NETWORK_FILE_SYSTEM, | |
| FILE_DEVICE_NULL, | |
| FILE_DEVICE_PARALLEL_PORT, | |
| FILE_DEVICE_PHYSICAL_NETCARD, | |
| FILE_DEVICE_PRINTER, | |
| FILE_DEVICE_SCANNER, | |
| FILE_DEVICE_SERIAL_MOUSE_PORT, | |
| FILE_DEVICE_SERIAL_PORT, | |
| FILE_DEVICE_SCREEN, | |
| FILE_DEVICE_SOUND, | |
| FILE_DEVICE_STREAMS, | |
| FILE_DEVICE_TAPE, | |
| FILE_DEVICE_TAPE_FILE_SYSTEM, | |
| FILE_DEVICE_TRANSPORT, | |
| FILE_DEVICE_UNKNOWN, | |
| FILE_DEVICE_VIDEO, | |
| FILE_DEVICE_VIRTUAL_DISK, | |
| FILE_DEVICE_WAVE_IN, | |
| FILE_DEVICE_WAVE_OUT, | |
| FILE_DEVICE_8042_PORT, | |
| FILE_DEVICE_NETWORK_REDIRECTOR, | |
| FILE_DEVICE_BATTERY, | |
| FILE_DEVICE_BUS_EXTENDER, | |
| FILE_DEVICE_MODEM, | |
| FILE_DEVICE_VDM, | |
| FILE_DEVICE_MASS_STORAGE, | |
| FILE_DEVICE_SMB, | |
| FILE_DEVICE_KS, | |
| FILE_DEVICE_CHANGER, | |
| FILE_DEVICE_SMARTCARD, | |
| FILE_DEVICE_ACPI, | |
| FILE_DEVICE_DVD, | |
| FILE_DEVICE_FULLSCREEN_VIDEO, | |
| FILE_DEVICE_DFS_FILE_SYSTEM, | |
| FILE_DEVICE_DFS_VOLUME, | |
| FILE_DEVICE_SERENUM, | |
| FILE_DEVICE_TERMSRV, | |
| FILE_DEVICE_KSEC // = 57 | |
| } | |
| enum { | |
| METHOD_BUFFERED, | |
| METHOD_IN_DIRECT, | |
| METHOD_OUT_DIRECT, | |
| METHOD_NEITHER | |
| } | |
| enum { | |
| FILE_ANY_ACCESS, | |
| FILE_SPECIAL_ACCESS = 0, | |
| FILE_READ_ACCESS, | |
| FILE_WRITE_ACCESS | |
| } | |
| /* Bit pattern: | |
| * tttttttt tttttttt aaffffff ffffffmm | |
| */ | |
| /+ | |
| #define CTL_CODE(t, f, m, a) (((t)<<16)|((a)<<14)|((f)<<2)|(m)) | |
| +/ | |
| template CTL_CODE_T(DEVICE_TYPE t, uint f, uint m, uint a) { | |
| enum DWORD CTL_CODE_T = (t << 16) | (a << 14) | (f << 2) | m; | |
| } | |
| DEVICE_TYPE DEVICE_TYPE_FROM_CTL_CODE(DWORD c) { | |
| return (c & 0xFFFF0000) >> 16; | |
| } | |
| enum DEVICE_TYPE | |
| IOCTL_STORAGE_BASE = FILE_DEVICE_MASS_STORAGE, | |
| IOCTL_DISK_BASE = FILE_DEVICE_DISK, | |
| IOCTL_VOLUME_BASE = 'V'; | |
| enum : DWORD { | |
| IOCTL_STORAGE_CHECK_VERIFY = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_CHECK_VERIFY2 = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_STORAGE_MEDIA_REMOVAL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_EJECT_MEDIA = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_LOAD_MEDIA = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_LOAD_MEDIA2 = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_STORAGE_RESERVE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_RELEASE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_FIND_NEW_DEVICES = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_EJECTION_CONTROL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_STORAGE_MCN_CONTROL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_STORAGE_GET_MEDIA_TYPES = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_STORAGE_GET_MEDIA_TYPES_EX = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_STORAGE_RESET_BUS = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_RESET_DEVICE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_STORAGE_GET_DEVICE_NUMBER = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_STORAGE_PREDICT_FAILURE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_GET_DRIVE_GEOMETRY = CTL_CODE_T!(IOCTL_DISK_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_GET_PARTITION_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 1, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_SET_PARTITION_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), | |
| IOCTL_DISK_GET_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_SET_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 4, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), | |
| IOCTL_DISK_VERIFY = CTL_CODE_T!(IOCTL_DISK_BASE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_FORMAT_TRACKS = CTL_CODE_T!(IOCTL_DISK_BASE, 6, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), | |
| IOCTL_DISK_REASSIGN_BLOCKS = CTL_CODE_T!(IOCTL_DISK_BASE, 7, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), | |
| IOCTL_DISK_PERFORMANCE = CTL_CODE_T!(IOCTL_DISK_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_IS_WRITABLE = CTL_CODE_T!(IOCTL_DISK_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_LOGGING = CTL_CODE_T!(IOCTL_DISK_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_FORMAT_TRACKS_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 11, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), | |
| IOCTL_DISK_HISTOGRAM_STRUCTURE = CTL_CODE_T!(IOCTL_DISK_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_HISTOGRAM_DATA = CTL_CODE_T!(IOCTL_DISK_BASE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_HISTOGRAM_RESET = CTL_CODE_T!(IOCTL_DISK_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_REQUEST_STRUCTURE = CTL_CODE_T!(IOCTL_DISK_BASE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_REQUEST_DATA = CTL_CODE_T!(IOCTL_DISK_BASE, 16, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_GET_PARTITION_INFO_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x12, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_SET_PARTITION_INFO_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), | |
| IOCTL_DISK_GET_DRIVE_LAYOUT_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x14, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_SET_DRIVE_LAYOUT_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x15, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), | |
| IOCTL_DISK_CREATE_DISK = CTL_CODE_T!(IOCTL_DISK_BASE, 0x16, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), | |
| IOCTL_DISK_GET_LENGTH_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 0x17, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_PERFORMANCE_OFF = CTL_CODE_T!(IOCTL_DISK_BASE, 0x18, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_GET_DRIVE_GEOMETRY_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x28, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_GROW_PARTITION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x34, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), | |
| IOCTL_DISK_GET_CACHE_INFORMATION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x35, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_SET_CACHE_INFORMATION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x36, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), | |
| IOCTL_DISK_DELETE_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 0x40, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), | |
| IOCTL_DISK_UPDATE_PROPERTIES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x50, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_CHECK_VERIFY = CTL_CODE_T!(IOCTL_DISK_BASE, 0x200, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_MEDIA_REMOVAL = CTL_CODE_T!(IOCTL_DISK_BASE, 0x201, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_EJECT_MEDIA = CTL_CODE_T!(IOCTL_DISK_BASE, 0x202, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_LOAD_MEDIA = CTL_CODE_T!(IOCTL_DISK_BASE, 0x203, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_RESERVE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x204, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_RELEASE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x205, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_FIND_NEW_DEVICES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x206, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_REMOVE_DEVICE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x207, METHOD_BUFFERED, FILE_READ_ACCESS), | |
| IOCTL_DISK_GET_MEDIA_TYPES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x300, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_DISK_UPDATE_DRIVE_SIZE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), | |
| IOCTL_SERIAL_LSRMST_INSERT = CTL_CODE_T!(FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = CTL_CODE_T!(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| IOCTL_VOLUME_IS_CLUSTERED = CTL_CODE_T!(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_LOCK_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_UNLOCK_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_DISMOUNT_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_MOUNT_DBLS_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 13, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_GET_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_SET_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA|FILE_WRITE_DATA), | |
| FSCTL_READ_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 17, METHOD_NEITHER, FILE_READ_DATA), | |
| FSCTL_WRITE_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 18, METHOD_NEITHER, FILE_WRITE_DATA), | |
| FSCTL_GET_NTFS_VOLUME_DATA = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_GET_VOLUME_BITMAP = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS), | |
| FSCTL_GET_RETRIEVAL_POINTERS = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS), | |
| FSCTL_MOVE_FILE = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_GET_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_SET_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_DELETE_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_ANY_ACCESS), | |
| FSCTL_SET_SPARSE = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS), | |
| } | |
| enum : BYTE { | |
| PARTITION_ENTRY_UNUSED, | |
| PARTITION_FAT_12, | |
| PARTITION_XENIX_1, | |
| PARTITION_XENIX_2, | |
| PARTITION_FAT_16, | |
| PARTITION_EXTENDED, | |
| PARTITION_HUGE, | |
| PARTITION_IFS, // = 0x07 | |
| PARTITION_FAT32 = 0x0B, | |
| PARTITION_FAT32_XINT13 = 0x0C, | |
| PARTITION_XINT13 = 0x0E, | |
| PARTITION_XINT13_EXTENDED = 0x0F, | |
| PARTITION_PREP = 0x41, | |
| PARTITION_LDM = 0x42, | |
| PARTITION_UNIX = 0x63 | |
| } | |
| enum BYTE | |
| PARTITION_NTFT = 0x80, | |
| VALID_NTFT = 0xC0; | |
| enum { | |
| SERIAL_LSRMST_ESCAPE, | |
| SERIAL_LSRMST_LSR_DATA, | |
| SERIAL_LSRMST_LSR_NODATA, | |
| SERIAL_LSRMST_MST | |
| } | |
| enum { | |
| DISK_LOGGING_START, | |
| DISK_LOGGING_STOP, | |
| DISK_LOGGING_DUMP, | |
| DISK_BINNING | |
| } | |
| alias BAD_TRACK_NUMBER = WORD; | |
| alias PBAD_TRACK_NUMBER = WORD*; | |
| enum BIN_TYPES { | |
| RequestSize, RequestLocation | |
| } | |
| struct BIN_RANGE { | |
| LARGE_INTEGER StartValue; | |
| LARGE_INTEGER Length; | |
| } | |
| alias PBIN_RANGE = BIN_RANGE*; | |
| struct BIN_COUNT { | |
| BIN_RANGE BinRange; | |
| DWORD BinCount; | |
| } | |
| alias PBIN_COUNT = BIN_COUNT*; | |
| struct BIN_RESULTS { | |
| DWORD NumberOfBins; | |
| BIN_COUNT _BinCounts; | |
| BIN_COUNT* BinCounts() return { return &_BinCounts; } | |
| } | |
| alias PBIN_RESULTS = BIN_RESULTS*; | |
| enum PARTITION_STYLE { | |
| PARTITION_STYLE_MBR, | |
| PARTITION_STYLE_GPT, | |
| PARTITION_STYLE_RAW | |
| } | |
| struct CREATE_DISK_GPT { | |
| GUID DiskId; | |
| DWORD MaxPartitionCount; | |
| } | |
| alias PCREATE_DISK_GPT = CREATE_DISK_GPT*; | |
| struct CREATE_DISK_MBR { | |
| DWORD Signature; | |
| } | |
| alias PCREATE_DISK_MBR = CREATE_DISK_MBR*; | |
| struct CREATE_DISK { | |
| PARTITION_STYLE PartitionStyle; | |
| union { | |
| CREATE_DISK_MBR Mbr; | |
| CREATE_DISK_GPT Gpt; | |
| } | |
| } | |
| alias PCREATE_DISK = CREATE_DISK*; | |
| enum DISK_CACHE_RETENTION_PRIORITY { | |
| EqualPriority, | |
| KeepPrefetchedData, | |
| KeepReadData | |
| } | |
| struct DISK_CACHE_INFORMATION { | |
| BOOLEAN ParametersSavable; | |
| BOOLEAN ReadCacheEnabled; | |
| BOOLEAN WriteCacheEnabled; | |
| DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; | |
| DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; | |
| WORD DisablePrefetchTransferLength; | |
| BOOLEAN PrefetchScalar; | |
| union { | |
| struct _ScalarPrefetch { | |
| WORD Minimum; | |
| WORD Maximum; | |
| WORD MaximumBlocks; | |
| } | |
| _ScalarPrefetch ScalarPrefetch; | |
| struct _BlockPrefetch { | |
| WORD Minimum; | |
| WORD Maximum; | |
| } | |
| _BlockPrefetch BlockPrefetch; | |
| } | |
| } | |
| alias PDISK_CACHE_INFORMATION = DISK_CACHE_INFORMATION*; | |
| enum DETECTION_TYPE { | |
| DetectNone, | |
| DetectInt13, | |
| DetectExInt13 | |
| } | |
| struct DISK_INT13_INFO { | |
| WORD DriveSelect; | |
| DWORD MaxCylinders; | |
| WORD SectorsPerTrack; | |
| WORD MaxHeads; | |
| WORD NumberDrives; | |
| } | |
| alias PDISK_INT13_INFO = DISK_INT13_INFO*; | |
| struct DISK_EX_INT13_INFO { | |
| WORD ExBufferSize; | |
| WORD ExFlags; | |
| DWORD ExCylinders; | |
| DWORD ExHeads; | |
| DWORD ExSectorsPerTrack; | |
| DWORD64 ExSectorsPerDrive; | |
| WORD ExSectorSize; | |
| WORD ExReserved; | |
| } | |
| alias PDISK_EX_INT13_INFO = DISK_EX_INT13_INFO*; | |
| struct DISK_DETECTION_INFO { | |
| DWORD SizeOfDetectInfo; | |
| DETECTION_TYPE DetectionType; | |
| DISK_INT13_INFO Int13; | |
| DISK_EX_INT13_INFO ExInt13; | |
| } | |
| alias PDISK_DETECTION_INFO = DISK_DETECTION_INFO*; | |
| enum MEDIA_TYPE { | |
| Unknown, | |
| F5_1Pt2_512, | |
| F3_1Pt44_512, | |
| F3_2Pt88_512, | |
| F3_20Pt8_512, | |
| F3_720_512, | |
| F5_360_512, | |
| F5_320_512, | |
| F5_320_1024, | |
| F5_180_512, | |
| F5_160_512, | |
| RemovableMedia, | |
| FixedMedia, | |
| F3_120M_512, | |
| F3_640_512, | |
| F5_640_512, | |
| F5_720_512, | |
| F3_1Pt2_512, | |
| F3_1Pt23_1024, | |
| F5_1Pt23_1024, | |
| F3_128Mb_512, | |
| F3_230Mb_512, | |
| F8_256_128, | |
| F3_200Mb_512, | |
| F3_240M_512, | |
| F3_32M_512 | |
| } | |
| alias PMEDIA_TYPE = MEDIA_TYPE*; | |
| struct DISK_GEOMETRY { | |
| LARGE_INTEGER Cylinders; | |
| MEDIA_TYPE MediaType; | |
| DWORD TracksPerCylinder; | |
| DWORD SectorsPerTrack; | |
| DWORD BytesPerSector; | |
| } | |
| alias PDISK_GEOMETRY = DISK_GEOMETRY*; | |
| struct DISK_GEOMETRY_EX { | |
| DISK_GEOMETRY Geometry; | |
| LARGE_INTEGER DiskSize; | |
| BYTE _Data; | |
| BYTE* Data() return { return &_Data; } | |
| } | |
| alias PDISK_GEOMETRY_EX = DISK_GEOMETRY_EX*; | |
| struct DISK_GROW_PARTITION { | |
| DWORD PartitionNumber; | |
| LARGE_INTEGER BytesToGrow; | |
| } | |
| alias PDISK_GROW_PARTITION = DISK_GROW_PARTITION*; | |
| struct DISK_PARTITION_INFO { | |
| DWORD SizeOfPartitionInfo; | |
| PARTITION_STYLE PartitionStyle; | |
| union { | |
| //struct { | |
| DWORD Signature; | |
| //} Mbr; | |
| //struct { | |
| GUID DiskId; | |
| //} Gpt; | |
| } | |
| } | |
| alias PDISK_PARTITION_INFO = DISK_PARTITION_INFO*; | |
| struct DISK_PERFORMANCE { | |
| LARGE_INTEGER BytesRead; | |
| LARGE_INTEGER BytesWritten; | |
| LARGE_INTEGER ReadTime; | |
| LARGE_INTEGER WriteTime; | |
| DWORD ReadCount; | |
| DWORD WriteCount; | |
| DWORD QueueDepth; | |
| } | |
| alias PDISK_PERFORMANCE = DISK_PERFORMANCE*; | |
| struct DISK_RECORD { | |
| LARGE_INTEGER ByteOffset; | |
| LARGE_INTEGER StartTime; | |
| LARGE_INTEGER EndTime; | |
| PVOID VirtualAddress; | |
| DWORD NumberOfBytes; | |
| BYTE DeviceNumber; | |
| BOOLEAN ReadRequest; | |
| } | |
| alias PDISK_RECORD = DISK_RECORD*; | |
| struct DISK_LOGGING { | |
| BYTE Function; | |
| PVOID BufferAddress; | |
| DWORD BufferSize; | |
| } | |
| alias PDISK_LOGGING = DISK_LOGGING*; | |
| struct DISKQUOTA_USER_INFORMATION { | |
| LONGLONG QuotaUsed; | |
| LONGLONG QuotaThreshold; | |
| LONGLONG QuotaLimit; | |
| } | |
| alias PDISKQUOTA_USER_INFORMATION = DISKQUOTA_USER_INFORMATION*; | |
| struct FORMAT_PARAMETERS { | |
| MEDIA_TYPE MediaType; | |
| DWORD StartCylinderNumber; | |
| DWORD EndCylinderNumber; | |
| DWORD StartHeadNumber; | |
| DWORD EndHeadNumber; | |
| } | |
| alias PFORMAT_PARAMETERS = FORMAT_PARAMETERS*; | |
| struct FORMAT_EX_PARAMETERS { | |
| MEDIA_TYPE MediaType; | |
| DWORD StartCylinderNumber; | |
| DWORD EndCylinderNumber; | |
| DWORD StartHeadNumber; | |
| DWORD EndHeadNumber; | |
| WORD FormatGapLength; | |
| WORD SectorsPerTrack; | |
| WORD _SectorNumber; | |
| WORD* SectorNumber() return { return &_SectorNumber; } | |
| } | |
| alias PFORMAT_EX_PARAMETERS = FORMAT_EX_PARAMETERS*; | |
| struct GET_LENGTH_INFORMATION { | |
| LARGE_INTEGER Length; | |
| } | |
| struct HISTOGRAM_BUCKET { | |
| DWORD Reads; | |
| DWORD Writes; | |
| } | |
| alias PHISTOGRAM_BUCKET = HISTOGRAM_BUCKET*; | |
| struct DISK_HISTOGRAM { | |
| LARGE_INTEGER DiskSize; | |
| LARGE_INTEGER Start; | |
| LARGE_INTEGER End; | |
| LARGE_INTEGER Average; | |
| LARGE_INTEGER AverageRead; | |
| LARGE_INTEGER AverageWrite; | |
| DWORD Granularity; | |
| DWORD Size; | |
| DWORD ReadCount; | |
| DWORD WriteCount; | |
| PHISTOGRAM_BUCKET Histogram; | |
| } | |
| alias PDISK_HISTOGRAM = DISK_HISTOGRAM*; | |
| struct DISK_EXTENT { | |
| DWORD DiskNumber; | |
| LARGE_INTEGER StartingOffset; | |
| LARGE_INTEGER ExtentLength; | |
| } | |
| alias PDISK_EXTENT = DISK_EXTENT*; | |
| struct VOLUME_DISK_EXTENTS { | |
| DWORD NumberOfDiskExtents; | |
| DISK_EXTENT _Extents; | |
| DISK_EXTENT* Extents() return { return &_Extents; } | |
| } | |
| alias PVOLUME_DISK_EXTENTS = VOLUME_DISK_EXTENTS*; | |
| struct PARTITION_INFORMATION { | |
| LARGE_INTEGER StartingOffset; | |
| LARGE_INTEGER PartitionLength; | |
| DWORD HiddenSectors; | |
| DWORD PartitionNumber; | |
| BYTE PartitionType; | |
| BOOLEAN BootIndicator; | |
| BOOLEAN RecognizedPartition; | |
| BOOLEAN RewritePartition; | |
| } | |
| alias PPARTITION_INFORMATION = PARTITION_INFORMATION*; | |
| struct DRIVE_LAYOUT_INFORMATION { | |
| DWORD PartitionCount; | |
| DWORD Signature; | |
| PARTITION_INFORMATION _PartitionEntry; | |
| PARTITION_INFORMATION* PartitionEntry() return { return &_PartitionEntry; } | |
| } | |
| alias PDRIVE_LAYOUT_INFORMATION = DRIVE_LAYOUT_INFORMATION*; | |
| struct DRIVE_LAYOUT_INFORMATION_GPT { | |
| GUID DiskId; | |
| LARGE_INTEGER StartingUsableOffset; | |
| LARGE_INTEGER UsableLength; | |
| ULONG MaxPartitionCount; | |
| } | |
| alias PDRIVE_LAYOUT_INFORMATION_GPT = DRIVE_LAYOUT_INFORMATION_GPT*; | |
| struct DRIVE_LAYOUT_INFORMATION_MBR { | |
| ULONG Signature; | |
| } | |
| alias PDRIVE_LAYOUT_INFORMATION_MBR = DRIVE_LAYOUT_INFORMATION_MBR*; | |
| struct PARTITION_INFORMATION_MBR { | |
| BYTE PartitionType; | |
| BOOLEAN BootIndicator; | |
| BOOLEAN RecognizedPartition; | |
| DWORD HiddenSectors; | |
| } | |
| struct PARTITION_INFORMATION_GPT { | |
| GUID PartitionType; | |
| GUID PartitionId; | |
| DWORD64 Attributes; | |
| WCHAR[36] Name = 0; | |
| } | |
| struct PARTITION_INFORMATION_EX { | |
| PARTITION_STYLE PartitionStyle; | |
| LARGE_INTEGER StartingOffset; | |
| LARGE_INTEGER PartitionLength; | |
| DWORD PartitionNumber; | |
| BOOLEAN RewritePartition; | |
| union { | |
| PARTITION_INFORMATION_MBR Mbr; | |
| PARTITION_INFORMATION_GPT Gpt; | |
| } | |
| } | |
| struct DRIVE_LAYOUT_INFORMATION_EX { | |
| DWORD PartitionStyle; | |
| DWORD PartitionCount; | |
| union { | |
| DRIVE_LAYOUT_INFORMATION_MBR Mbr; | |
| DRIVE_LAYOUT_INFORMATION_GPT Gpt; | |
| } | |
| PARTITION_INFORMATION_EX _PartitionEntry; | |
| PARTITION_INFORMATION_EX* PartitionEntry() return { return &_PartitionEntry; } | |
| } | |
| alias PDRIVE_LAYOUT_INFORMATION_EX = DRIVE_LAYOUT_INFORMATION_EX*; | |
| struct MOVE_FILE_DATA { | |
| HANDLE FileHandle; | |
| LARGE_INTEGER StartingVcn; | |
| LARGE_INTEGER StartingLcn; | |
| DWORD ClusterCount; | |
| } | |
| alias PMOVE_FILE_DATA = MOVE_FILE_DATA*; | |
| struct PERF_BIN { | |
| DWORD NumberOfBins; | |
| DWORD TypeOfBin; | |
| BIN_RANGE _BinsRanges; | |
| BIN_RANGE* BinsRanges() return { return &_BinsRanges; } | |
| } | |
| alias PPERF_BIN = PERF_BIN*; | |
| struct PREVENT_MEDIA_REMOVAL { | |
| BOOLEAN PreventMediaRemoval; | |
| } | |
| alias PPREVENT_MEDIA_REMOVAL = PREVENT_MEDIA_REMOVAL*; | |
| struct RETRIEVAL_POINTERS_BUFFER { | |
| DWORD ExtentCount; | |
| LARGE_INTEGER StartingVcn; | |
| // In MinGW, this is declared as struct { ... } Extents[1]; | |
| struct Extent { | |
| LARGE_INTEGER NextVcn; | |
| LARGE_INTEGER Lcn; | |
| } | |
| Extent _Extents; | |
| Extent* Extents() return { return &_Extents; } | |
| } | |
| alias PRETRIEVAL_POINTERS_BUFFER = RETRIEVAL_POINTERS_BUFFER*; | |
| struct REASSIGN_BLOCKS { | |
| WORD Reserved; | |
| WORD Count; | |
| DWORD _BlockNumber; | |
| DWORD* BlockNumber() return { return &_BlockNumber; } | |
| } | |
| alias PREASSIGN_BLOCKS = REASSIGN_BLOCKS*; | |
| struct SET_PARTITION_INFORMATION { | |
| BYTE PartitionType; | |
| } | |
| alias PSET_PARTITION_INFORMATION = SET_PARTITION_INFORMATION*; | |
| struct STARTING_LCN_INPUT_BUFFER { | |
| LARGE_INTEGER StartingLcn; | |
| } | |
| alias PSTARTING_LCN_INPUT_BUFFER = STARTING_LCN_INPUT_BUFFER*; | |
| struct STARTING_VCN_INPUT_BUFFER { | |
| LARGE_INTEGER StartingVcn; | |
| } | |
| alias PSTARTING_VCN_INPUT_BUFFER = STARTING_VCN_INPUT_BUFFER*; | |
| struct VERIFY_INFORMATION { | |
| LARGE_INTEGER StartingOffset; | |
| DWORD Length; | |
| } | |
| alias PVERIFY_INFORMATION = VERIFY_INFORMATION*; | |
| struct VOLUME_BITMAP_BUFFER { | |
| LARGE_INTEGER StartingLcn; | |
| LARGE_INTEGER BitmapSize; | |
| BYTE _Buffer; | |
| BYTE* Buffer() return { return &_Buffer; } | |
| } | |
| alias PVOLUME_BITMAP_BUFFER = VOLUME_BITMAP_BUFFER*; | |
| struct NTFS_VOLUME_DATA_BUFFER { | |
| LARGE_INTEGER VolumeSerialNumber; | |
| LARGE_INTEGER NumberSectors; | |
| LARGE_INTEGER TotalClusters; | |
| LARGE_INTEGER FreeClusters; | |
| LARGE_INTEGER TotalReserved; | |
| DWORD BytesPerSector; | |
| DWORD BytesPerCluster; | |
| DWORD BytesPerFileRecordSegment; | |
| DWORD ClustersPerFileRecordSegment; | |
| LARGE_INTEGER MftValidDataLength; | |
| LARGE_INTEGER MftStartLcn; | |
| LARGE_INTEGER Mft2StartLcn; | |
| LARGE_INTEGER MftZoneStart; | |
| LARGE_INTEGER MftZoneEnd; | |
| } | |
| alias PNTFS_VOLUME_DATA_BUFFER = NTFS_VOLUME_DATA_BUFFER*; | |
| bool IsRecognizedPartition(BYTE t) { | |
| return ((t & PARTITION_NTFT) | |
| && ((t & (-1 - VALID_NTFT)) == PARTITION_FAT_12 | |
| || (t & (-1 - VALID_NTFT)) == PARTITION_FAT_16 | |
| || (t & (-1 - VALID_NTFT)) == PARTITION_IFS | |
| || (t & (-1 - VALID_NTFT)) == PARTITION_HUGE | |
| || (t & (-1 - VALID_NTFT)) == PARTITION_FAT32 | |
| || (t & (-1 - VALID_NTFT)) == PARTITION_FAT32_XINT13 | |
| || (t & (-1 - VALID_NTFT)) == PARTITION_XINT13)) | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT_12 | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT_16 | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_IFS | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_HUGE | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT32 | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_FAT32_XINT13 | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_XINT13; | |
| } | |
| bool IsContainerPartition(BYTE t) { | |
| return ((t & PARTITION_NTFT) | |
| && ((t & (-1 - VALID_NTFT)) == PARTITION_EXTENDED | |
| || (t & (-1 - VALID_NTFT)) == PARTITION_XINT13_EXTENDED)) | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_EXTENDED | |
| || (t & (-1 - PARTITION_NTFT)) == PARTITION_XINT13_EXTENDED; | |
| } |