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