winioctl.h (132586B) - Raw
1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifdef DEFINE_GUID 7 8 #ifndef FAR 9 #define FAR 10 #endif 11 12 DEFINE_GUID(GUID_DEVINTERFACE_DISK,0x53f56307,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 13 DEFINE_GUID(GUID_DEVINTERFACE_CDROM,0x53f56308,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 14 DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,0x53f5630a,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 15 DEFINE_GUID(GUID_DEVINTERFACE_TAPE,0x53f5630b,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 16 DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,0x53f5630c,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 17 DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,0x53f5630d,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 18 DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,0x53f56310,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 19 DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,0x53f56311,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 20 DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,0x53f56312,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 21 DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,0x2accfe60,0xc130,0x11d2,0xb0,0x82,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); 22 DEFINE_GUID(GUID_DEVINTERFACE_VMLUN,0x6f416619,0x9f29,0x42a5,0xb2,0x0b,0x37,0xe2,0x19,0xca,0x02,0xb0); 23 DEFINE_GUID(GUID_DEVINTERFACE_SES,0x1790c9ec,0x47d5,0x4df3,0xb5,0xaf,0x9a,0xdf,0x3c,0xf2,0x3e,0x48); 24 DEFINE_GUID(GUID_DEVINTERFACE_ZNSDISK,0xb87941c5,0xffdb,0x43c7,0xb6,0xb1,0x20,0xb6,0x32,0xf0,0xb1,0x09); 25 #define WDI_STORAGE_PREDICT_FAILURE_DPS_GUID {0xe9f2d03a,0x747c,0x41c2,{0xbb,0x9a,0x02,0xc6,0x2b,0x6d,0x5f,0xcb}}; 26 27 DEFINE_GUID(GUID_DEVINTERFACE_SERVICE_VOLUME,0x6ead3d82,0x25ec,0x46bc,0xb7,0xfd,0xc1,0xf0,0xdf,0x8f,0x50,0x37); 28 DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME,0x7f108a28,0x9833,0x4b3b,0xb7,0x80,0x2c,0x6b,0x5f,0xa5,0xc0,0x62); 29 DEFINE_GUID(GUID_DEVINTERFACE_UNIFIED_ACCESS_RPMB,0x27447c21,0xbcc3,0x4d07,0xa0,0x5b,0xa3,0x39,0x5b,0xb4,0xee,0xe7); 30 DEFINE_GUID(GUID_DEVINTERFACE_SCM_PHYSICAL_DEVICE,0x4283609d,0x4dc2,0x43be,0xbb,0xb4,0x4f,0x15,0xdf,0xce,0x2c,0x61); 31 DEFINE_GUID(GUID_SCM_PD_HEALTH_NOTIFICATION,0x9da2d386,0x72f5,0x4ee3,0x81,0x55,0xec,0xa0,0x67,0x8e,0x3b,0x6); 32 DEFINE_GUID(GUID_SCM_PD_PASSTHROUGH_INVDIMM,0x4309ac30,0x0d11,0x11e4,0x91,0x91,0x08,0x00,0x20,0x0c,0x9a,0x66); 33 DEFINE_GUID(GUID_DEVINTERFACE_COMPORT,0x86e0d1e0,0x8089,0x11d0,0x9c,0xe4,0x08,0x00,0x3e,0x30,0x1f,0x73); 34 DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,0x4D36E978,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18); 35 36 #define DiskClassGuid GUID_DEVINTERFACE_DISK 37 #define CdRomClassGuid GUID_DEVINTERFACE_CDROM 38 #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION 39 #define TapeClassGuid GUID_DEVINTERFACE_TAPE 40 #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK 41 #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME 42 #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER 43 #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY 44 #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER 45 #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT 46 #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME 47 #define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT 48 #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR 49 #endif /* DEFINE_GUID */ 50 51 #ifdef DEFINE_DEVPROPKEY 52 53 #ifndef __WRAPPED__ 54 #define __WRAPPED__ 55 #endif 56 57 DEFINE_DEVPROPKEY(DEVPKEY_Storage_Portable,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,2); 58 DEFINE_DEVPROPKEY(DEVPKEY_Storage_Removable_Media,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,3); 59 DEFINE_DEVPROPKEY(DEVPKEY_Storage_System_Critical,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,4); 60 DEFINE_DEVPROPKEY(DEVPKEY_Storage_Disk_Number,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,5); 61 DEFINE_DEVPROPKEY(DEVPKEY_Storage_Partition_Number,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,6); 62 DEFINE_DEVPROPKEY(DEVPKEY_Storage_Mbr_Type,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,7); 63 DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Type,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,8); 64 DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Name,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,9); 65 66 #endif /* DEFINE_DEVPROPKEY */ 67 68 #ifndef _WINIOCTL_ 69 #define _WINIOCTL_ 70 71 #ifndef _DEVIOCTL_ 72 #define _DEVIOCTL_ 73 74 #ifndef DEVICE_TYPE 75 #define DEVICE_TYPE DWORD 76 #endif 77 78 #define FILE_DEVICE_BEEP 0x00000001 79 #define FILE_DEVICE_CD_ROM 0x00000002 80 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 81 #define FILE_DEVICE_CONTROLLER 0x00000004 82 #define FILE_DEVICE_DATALINK 0x00000005 83 #define FILE_DEVICE_DFS 0x00000006 84 #define FILE_DEVICE_DISK 0x00000007 85 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 86 #define FILE_DEVICE_FILE_SYSTEM 0x00000009 87 #define FILE_DEVICE_INPORT_PORT 0x0000000a 88 #define FILE_DEVICE_KEYBOARD 0x0000000b 89 #define FILE_DEVICE_MAILSLOT 0x0000000c 90 #define FILE_DEVICE_MIDI_IN 0x0000000d 91 #define FILE_DEVICE_MIDI_OUT 0x0000000e 92 #define FILE_DEVICE_MOUSE 0x0000000f 93 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 94 #define FILE_DEVICE_NAMED_PIPE 0x00000011 95 #define FILE_DEVICE_NETWORK 0x00000012 96 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 97 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 98 #define FILE_DEVICE_NULL 0x00000015 99 #define FILE_DEVICE_PARALLEL_PORT 0x00000016 100 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 101 #define FILE_DEVICE_PRINTER 0x00000018 102 #define FILE_DEVICE_SCANNER 0x00000019 103 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a 104 #define FILE_DEVICE_SERIAL_PORT 0x0000001b 105 #define FILE_DEVICE_SCREEN 0x0000001c 106 #define FILE_DEVICE_SOUND 0x0000001d 107 #define FILE_DEVICE_STREAMS 0x0000001e 108 #define FILE_DEVICE_TAPE 0x0000001f 109 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 110 #define FILE_DEVICE_TRANSPORT 0x00000021 111 #define FILE_DEVICE_UNKNOWN 0x00000022 112 #define FILE_DEVICE_VIDEO 0x00000023 113 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 114 #define FILE_DEVICE_WAVE_IN 0x00000025 115 #define FILE_DEVICE_WAVE_OUT 0x00000026 116 #define FILE_DEVICE_8042_PORT 0x00000027 117 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 118 #define FILE_DEVICE_BATTERY 0x00000029 119 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a 120 #define FILE_DEVICE_MODEM 0x0000002b 121 #define FILE_DEVICE_VDM 0x0000002c 122 #define FILE_DEVICE_MASS_STORAGE 0x0000002d 123 #define FILE_DEVICE_SMB 0x0000002e 124 #define FILE_DEVICE_KS 0x0000002f 125 #define FILE_DEVICE_CHANGER 0x00000030 126 #define FILE_DEVICE_SMARTCARD 0x00000031 127 #define FILE_DEVICE_ACPI 0x00000032 128 #define FILE_DEVICE_DVD 0x00000033 129 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 130 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 131 #define FILE_DEVICE_DFS_VOLUME 0x00000036 132 #define FILE_DEVICE_SERENUM 0x00000037 133 #define FILE_DEVICE_TERMSRV 0x00000038 134 #define FILE_DEVICE_KSEC 0x00000039 135 #define FILE_DEVICE_FIPS 0x0000003A 136 #define FILE_DEVICE_INFINIBAND 0x0000003B 137 #define FILE_DEVICE_VMBUS 0x0000003E 138 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F 139 #define FILE_DEVICE_WPD 0x00000040 140 #define FILE_DEVICE_BLUETOOTH 0x00000041 141 #define FILE_DEVICE_MT_COMPOSITE 0x00000042 142 #define FILE_DEVICE_MT_TRANSPORT 0x00000043 143 #define FILE_DEVICE_BIOMETRIC 0x00000044 144 #define FILE_DEVICE_PMI 0x00000045 145 #define FILE_DEVICE_EHSTOR 0x00000046 146 #define FILE_DEVICE_DEVAPI 0x00000047 147 #define FILE_DEVICE_GPIO 0x00000048 148 #define FILE_DEVICE_USBEX 0x00000049 149 #define FILE_DEVICE_CONSOLE 0x00000050 150 #define FILE_DEVICE_NFP 0x00000051 151 #define FILE_DEVICE_SYSENV 0x00000052 152 #define FILE_DEVICE_VIRTUAL_BLOCK 0x00000053 153 #define FILE_DEVICE_POINT_OF_SERVICE 0x00000054 154 #define FILE_DEVICE_STORAGE_REPLICATION 0x00000055 155 #define FILE_DEVICE_TRUST_ENV 0x00000056 156 #define FILE_DEVICE_UCM 0x00000057 157 #define FILE_DEVICE_UCMTCPCI 0x00000058 158 #define FILE_DEVICE_PERSISTENT_MEMORY 0x00000059 159 #define FILE_DEVICE_NVDIMM 0x0000005a 160 #define FILE_DEVICE_HOLOGRAPHIC 0x0000005b 161 #define FILE_DEVICE_SDFXHCI 0x0000005c 162 #define FILE_DEVICE_UCMUCSI 0x0000005d 163 #define FILE_DEVICE_PRM 0x0000005e 164 #define FILE_DEVICE_EVENT_COLLECTOR 0x0000005f 165 #define FILE_DEVICE_USB4 0x00000060 166 #define FILE_DEVICE_SOUNDWIRE 0x00000061 167 168 #define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 169 170 #define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((DWORD)(ctrlCode & 0xffff0000)) >> 16) 171 #define METHOD_FROM_CTL_CODE(ctrlCode) ((DWORD)(ctrlCode & 3)) 172 173 #define METHOD_BUFFERED 0 174 #define METHOD_IN_DIRECT 1 175 #define METHOD_OUT_DIRECT 2 176 #define METHOD_NEITHER 3 177 178 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT 179 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT 180 181 #define FILE_ANY_ACCESS 0 182 #define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS) 183 #define FILE_READ_ACCESS (0x0001) 184 #define FILE_WRITE_ACCESS (0x0002) 185 186 #endif /* _DEVIOCTL_ */ 187 188 189 #ifndef _NTDDSTOR_H_ 190 #define _NTDDSTOR_H_ 191 192 #ifdef __cplusplus 193 extern "C" { 194 #endif 195 196 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE 197 198 #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS) 199 #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_ANY_ACCESS) 200 #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS) 201 #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS) 202 #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS) 203 #define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_ANY_ACCESS) 204 #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS) 205 #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS) 206 #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS) 207 208 #define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0250,METHOD_BUFFERED,FILE_ANY_ACCESS) 209 #define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0251,METHOD_BUFFERED,FILE_ANY_ACCESS) 210 211 #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS) 212 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE,0x0301,METHOD_BUFFERED,FILE_ANY_ACCESS) 213 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0304,METHOD_BUFFERED,FILE_ANY_ACCESS) 214 #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0305,METHOD_BUFFERED,FILE_ANY_ACCESS) 215 #define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0306,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 216 217 #define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS) 218 #define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS) 219 #define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE,0x0405,METHOD_BUFFERED,FILE_READ_ACCESS) 220 #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS) 221 #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 222 223 #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0420,METHOD_BUFFERED,FILE_ANY_ACCESS) 224 #define IOCTL_STORAGE_GET_DEVICE_NUMBER_EX CTL_CODE(IOCTL_STORAGE_BASE,0x0421,METHOD_BUFFERED,FILE_ANY_ACCESS) 225 #define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE,0x0440,METHOD_BUFFERED,FILE_ANY_ACCESS) 226 #define IOCTL_STORAGE_FAILURE_PREDICTION_CONFIG CTL_CODE(IOCTL_STORAGE_BASE,0x0441,METHOD_BUFFERED,FILE_ANY_ACCESS) 227 #define IOCTL_STORAGE_GET_COUNTERS CTL_CODE(IOCTL_STORAGE_BASE,0x442,METHOD_BUFFERED,FILE_ANY_ACCESS) 228 #define IOCTL_STORAGE_READ_CAPACITY CTL_CODE(IOCTL_STORAGE_BASE,0x0450,METHOD_BUFFERED,FILE_READ_ACCESS) 229 230 #define IOCTL_STORAGE_GET_DEVICE_TELEMETRY CTL_CODE(IOCTL_STORAGE_BASE, 0x0470, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 231 #define IOCTL_STORAGE_DEVICE_TELEMETRY_NOTIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0471, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 232 #define IOCTL_STORAGE_DEVICE_TELEMETRY_QUERY_CAPS CTL_CODE(IOCTL_STORAGE_BASE, 0x0472, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 233 #define IOCTL_STORAGE_GET_DEVICE_TELEMETRY_RAW CTL_CODE(IOCTL_STORAGE_BASE, 0x0473, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 234 235 #define IOCTL_STORAGE_SET_TEMPERATURE_THRESHOLD CTL_CODE(IOCTL_STORAGE_BASE, 0x0480, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 236 237 #define IOCTL_STORAGE_PROTOCOL_COMMAND CTL_CODE(IOCTL_STORAGE_BASE, 0x04F0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 238 239 #define IOCTL_STORAGE_SET_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x04FF, METHOD_BUFFERED, FILE_WRITE_ACCESS) 240 #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) 241 #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS) 242 #define IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES CTL_CODE(IOCTL_STORAGE_BASE, 0x0502, METHOD_BUFFERED, FILE_READ_ACCESS) 243 244 #define IOCTL_STORAGE_REINITIALIZE_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0590, METHOD_BUFFERED, FILE_WRITE_ACCESS) 245 246 #define IOCTL_STORAGE_GET_BC_PROPERTIES CTL_CODE(IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS) 247 #define IOCTL_STORAGE_ALLOCATE_BC_STREAM CTL_CODE(IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 248 #define IOCTL_STORAGE_FREE_BC_STREAM CTL_CODE(IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 249 250 #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT CTL_CODE(IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS) 251 252 #define IOCTL_STORAGE_START_DATA_INTEGRITY_CHECK CTL_CODE(IOCTL_STORAGE_BASE, 0x0621, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 253 #define IOCTL_STORAGE_STOP_DATA_INTEGRITY_CHECK CTL_CODE(IOCTL_STORAGE_BASE, 0x0622, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 254 255 #define OBSOLETE_IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 256 #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 257 258 #define IOCTL_STORAGE_FIRMWARE_GET_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0700, METHOD_BUFFERED, FILE_ANY_ACCESS) 259 #define IOCTL_STORAGE_FIRMWARE_DOWNLOAD CTL_CODE(IOCTL_STORAGE_BASE, 0x0701, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 260 #define IOCTL_STORAGE_FIRMWARE_ACTIVATE CTL_CODE(IOCTL_STORAGE_BASE, 0x0702, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 261 262 #define IOCTL_STORAGE_ENABLE_IDLE_POWER CTL_CODE(IOCTL_STORAGE_BASE, 0x0720, METHOD_BUFFERED, FILE_ANY_ACCESS) 263 #define IOCTL_STORAGE_GET_IDLE_POWERUP_REASON CTL_CODE(IOCTL_STORAGE_BASE, 0x0721, METHOD_BUFFERED, FILE_ANY_ACCESS) 264 265 #define IOCTL_STORAGE_POWER_ACTIVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0722, METHOD_BUFFERED, FILE_ANY_ACCESS) 266 #define IOCTL_STORAGE_POWER_IDLE CTL_CODE(IOCTL_STORAGE_BASE, 0x0723, METHOD_BUFFERED, FILE_ANY_ACCESS) 267 268 #define IOCTL_STORAGE_EVENT_NOTIFICATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0724, METHOD_BUFFERED, FILE_ANY_ACCESS) 269 #define IOCTL_STORAGE_DEVICE_POWER_CAP CTL_CODE(IOCTL_STORAGE_BASE, 0x0725, METHOD_BUFFERED, FILE_ANY_ACCESS) 270 #define IOCTL_STORAGE_RPMB_COMMAND CTL_CODE(IOCTL_STORAGE_BASE, 0x0726, METHOD_BUFFERED, FILE_ANY_ACCESS) 271 #define IOCTL_STORAGE_ATTRIBUTE_MANAGEMENT CTL_CODE(IOCTL_STORAGE_BASE, 0x0727, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 272 #define IOCTL_STORAGE_DIAGNOSTIC CTL_CODE(IOCTL_STORAGE_BASE, 0x0728, METHOD_BUFFERED, FILE_ANY_ACCESS) 273 #define IOCTL_STORAGE_GET_PHYSICAL_ELEMENT_STATUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0729, METHOD_BUFFERED, FILE_ANY_ACCESS) 274 #define IOCTL_STORAGE_REMOVE_ELEMENT_AND_TRUNCATE CTL_CODE(IOCTL_STORAGE_BASE, 0x0730, METHOD_BUFFERED, FILE_ANY_ACCESS) 275 #define IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG CTL_CODE(IOCTL_STORAGE_BASE, 0x0731, METHOD_BUFFERED, FILE_ANY_ACCESS) 276 277 typedef struct _STORAGE_READ_CAPACITY { 278 ULONG Version; 279 ULONG Size; 280 ULONG BlockLength; 281 LARGE_INTEGER NumberOfBlocks; 282 LARGE_INTEGER DiskLength; 283 } STORAGE_READ_CAPACITY, *PSTORAGE_READ_CAPACITY; 284 285 #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS) 286 #define DeviceDsmActionFlag_NonDestructive 0x80000000 287 #define DeviceDsmAction_None 0 288 #define DeviceDsmAction_Trim 1 289 #define DeviceDsmAction_Notification (2 | DeviceDsmActionFlag_NonDestructive) 290 291 #define IsDsmActionNonDestructive(x) ((BOOLEAN)(!!((x) & DeviceDsmActionFlag_NonDestructive))) 292 293 #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE __MSABI_LONG(0x00000001) 294 295 #define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001 296 #define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002 297 298 #define IOCTL_STORAGE_BC_VERSION 1 299 300 #define STORAGE_PRIORITY_HINT_SUPPORTED 0x0001 301 302 typedef DWORD DEVICE_DATA_MANAGEMENT_SET_ACTION; 303 typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES { 304 DWORD Size; 305 DEVICE_DATA_MANAGEMENT_SET_ACTION Action; 306 DWORD Flags; 307 DWORD ParameterBlockOffset; 308 DWORD ParameterBlockLength; 309 DWORD DataSetRangesOffset; 310 DWORD DataSetRangesLength; 311 } DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES; 312 313 typedef struct _DEVICE_DATA_SET_RANGE { 314 LONGLONG StartingOffset; 315 DWORDLONG LengthInBytes; 316 } DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE; 317 318 typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS { 319 ULONG Size; 320 ULONG Flags; 321 ULONG NumFileTypeIDs; 322 GUID FileTypeID[1]; 323 } DEVICE_DSM_NOTIFICATION_PARAMETERS, *PDEVICE_DSM_NOTIFICATION_PARAMETERS; 324 325 typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT { 326 ULONG MaximumRequestsPerPeriod; 327 ULONG MinimumPeriod; 328 ULONGLONG MaximumRequestSize; 329 ULONG EstimatedTimePerRequest; 330 ULONG NumOutStandingRequests; 331 ULONGLONG RequestSize; 332 } STORAGE_GET_BC_PROPERTIES_OUTPUT, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT; 333 334 typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT { 335 ULONG Version; 336 ULONG RequestsPerPeriod; 337 ULONG Period; 338 BOOLEAN RetryFailures; 339 BOOLEAN Discardable; 340 BOOLEAN Reserved1[2]; 341 ULONG AccessType; 342 ULONG AccessMode; 343 } STORAGE_ALLOCATE_BC_STREAM_INPUT, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT; 344 345 typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT { 346 ULONGLONG RequestSize; 347 ULONG NumOutStandingRequests; 348 } STORAGE_ALLOCATE_BC_STREAM_OUTPUT, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT; 349 350 typedef struct _STORAGE_PRIORITY_HINT_SUPPORT { 351 ULONG SupportFlags; 352 } STORAGE_PRIORITY_HINT_SUPPORT, *PSTORAGE_PRIORITY_HINT_SUPPORT; 353 354 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__) 355 356 typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA { 357 USHORT Reserved; 358 USHORT SerialNumberLength; 359 UCHAR SerialNumber[0]; 360 } STORAGE_MEDIA_SERIAL_NUMBER_DATA, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA; 361 362 typedef struct _PERSISTENT_RESERVE_COMMAND { 363 ULONG Version; 364 ULONG Size; 365 __C89_NAMELESS union { 366 struct { 367 UCHAR ServiceAction:5; 368 UCHAR Reserved1:3; 369 USHORT AllocationLength; 370 } PR_IN; 371 struct { 372 UCHAR ServiceAction:5; 373 UCHAR Reserved1:3; 374 UCHAR Type:4; 375 UCHAR Scope:4; 376 UCHAR ParameterList[0]; 377 } PR_OUT; 378 } DUMMYUNIONNAME; 379 } PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND; 380 381 #endif /* defined(_MSC_EXTENSIONS) */ 382 383 typedef struct _STORAGE_HOTPLUG_INFO { 384 DWORD Size; 385 BOOLEAN MediaRemovable; 386 BOOLEAN MediaHotplug; 387 BOOLEAN DeviceHotplug; 388 BOOLEAN WriteCacheEnableOverride; 389 } STORAGE_HOTPLUG_INFO,*PSTORAGE_HOTPLUG_INFO; 390 391 typedef struct _STORAGE_DEVICE_NUMBER { 392 DEVICE_TYPE DeviceType; 393 DWORD DeviceNumber; 394 DWORD PartitionNumber; 395 } STORAGE_DEVICE_NUMBER,*PSTORAGE_DEVICE_NUMBER; 396 397 typedef struct _STORAGE_DEVICE_NUMBERS { 398 DWORD Version; 399 DWORD Size; 400 DWORD NumberOfDevices; 401 STORAGE_DEVICE_NUMBER Devices[ANYSIZE_ARRAY]; 402 } STORAGE_DEVICE_NUMBERS,*PSTORAGE_DEVICE_NUMBERS; 403 404 #define STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_CONFLICT 0x1 405 #define STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_NOHWID 0x2 406 #define STORAGE_DEVICE_FLAGS_PAGE_83_DEVICEGUID 0x4 407 408 typedef struct _STORAGE_DEVICE_NUMBER_EX { 409 DWORD Version; 410 DWORD Size; 411 DWORD Flags; 412 DEVICE_TYPE DeviceType; 413 DWORD DeviceNumber; 414 GUID DeviceGuid; 415 DWORD PartitionNumber; 416 } STORAGE_DEVICE_NUMBER_EX,*PSTORAGE_DEVICE_NUMBER_EX; 417 418 typedef struct _STORAGE_BUS_RESET_REQUEST { 419 BYTE PathId; 420 } STORAGE_BUS_RESET_REQUEST,*PSTORAGE_BUS_RESET_REQUEST; 421 422 typedef struct STORAGE_BREAK_RESERVATION_REQUEST { 423 DWORD Length; 424 BYTE _unused; 425 BYTE PathId; 426 BYTE TargetId; 427 BYTE Lun; 428 } STORAGE_BREAK_RESERVATION_REQUEST,*PSTORAGE_BREAK_RESERVATION_REQUEST; 429 430 typedef struct _PREVENT_MEDIA_REMOVAL { 431 BOOLEAN PreventMediaRemoval; 432 } PREVENT_MEDIA_REMOVAL,*PPREVENT_MEDIA_REMOVAL; 433 434 typedef struct _CLASS_MEDIA_CHANGE_CONTEXT { 435 DWORD MediaChangeCount; 436 DWORD NewState; 437 } CLASS_MEDIA_CHANGE_CONTEXT,*PCLASS_MEDIA_CHANGE_CONTEXT; 438 439 typedef struct _TAPE_STATISTICS { 440 DWORD Version; 441 DWORD Flags; 442 LARGE_INTEGER RecoveredWrites; 443 LARGE_INTEGER UnrecoveredWrites; 444 LARGE_INTEGER RecoveredReads; 445 LARGE_INTEGER UnrecoveredReads; 446 BYTE CompressionRatioReads; 447 BYTE CompressionRatioWrites; 448 } TAPE_STATISTICS,*PTAPE_STATISTICS; 449 450 #define RECOVERED_WRITES_VALID 0x00000001 451 #define UNRECOVERED_WRITES_VALID 0x00000002 452 #define RECOVERED_READS_VALID 0x00000004 453 #define UNRECOVERED_READS_VALID 0x00000008 454 #define WRITE_COMPRESSION_INFO_VALID 0x00000010 455 #define READ_COMPRESSION_INFO_VALID 0x00000020 456 457 typedef struct _TAPE_GET_STATISTICS { 458 DWORD Operation; 459 } TAPE_GET_STATISTICS,*PTAPE_GET_STATISTICS; 460 461 #define TAPE_RETURN_STATISTICS __MSABI_LONG(0) 462 #define TAPE_RETURN_ENV_INFO __MSABI_LONG(1) 463 #define TAPE_RESET_STATISTICS __MSABI_LONG(2) 464 465 typedef enum _STORAGE_MEDIA_TYPE { 466 DDS_4mm = 0x20, 467 MiniQic, 468 Travan, 469 QIC, 470 MP_8mm, 471 AME_8mm, 472 AIT1_8mm, 473 DLT, 474 NCTP, 475 IBM_3480, 476 IBM_3490E, 477 IBM_Magstar_3590, 478 IBM_Magstar_MP, 479 STK_DATA_D3, 480 SONY_DTF, 481 DV_6mm, 482 DMI, 483 SONY_D2, 484 CLEANER_CARTRIDGE, 485 CD_ROM, 486 CD_R, 487 CD_RW, 488 DVD_ROM, 489 DVD_R, 490 DVD_RW, 491 MO_3_RW, 492 MO_5_WO, 493 MO_5_RW, 494 MO_5_LIMDOW, 495 PC_5_WO, 496 PC_5_RW, 497 PD_5_RW, 498 ABL_5_WO, 499 PINNACLE_APEX_5_RW, 500 SONY_12_WO, 501 PHILIPS_12_WO, 502 HITACHI_12_WO, 503 CYGNET_12_WO, 504 KODAK_14_WO, 505 MO_NFR_525, 506 NIKON_12_RW, 507 IOMEGA_ZIP, 508 IOMEGA_JAZ, 509 SYQUEST_EZ135, 510 SYQUEST_EZFLYER, 511 SYQUEST_SYJET, 512 AVATAR_F2, 513 MP2_8mm, 514 DST_S, 515 DST_M, 516 DST_L, 517 VXATape_1, 518 VXATape_2, 519 STK_9840, 520 LTO_Ultrium, 521 LTO_Accelis, 522 DVD_RAM, 523 AIT_8mm, 524 ADR_1, 525 ADR_2, 526 STK_9940, 527 SAIT, 528 VXATape 529 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE; 530 531 #define MEDIA_ERASEABLE 0x00000001 532 #define MEDIA_WRITE_ONCE 0x00000002 533 #define MEDIA_READ_ONLY 0x00000004 534 #define MEDIA_READ_WRITE 0x00000008 535 536 #define MEDIA_WRITE_PROTECTED 0x00000100 537 #define MEDIA_CURRENTLY_MOUNTED 0x80000000 538 539 typedef enum _STORAGE_BUS_TYPE { 540 BusTypeUnknown = 0x00, 541 BusTypeScsi = 0x1, 542 BusTypeAtapi = 0x2, 543 BusTypeAta = 0x3, 544 BusType1394 = 0x4, 545 BusTypeSsa = 0x5, 546 BusTypeFibre = 0x6, 547 BusTypeUsb = 0x7, 548 BusTypeRAID = 0x8, 549 #if (_WIN32_WINNT >= 0x0600) 550 BusTypeiScsi = 0x9, 551 BusTypeSas = 0xA, 552 BusTypeSata = 0xB, 553 BusTypeSd = 0xC, 554 BusTypeMmc = 0xD, 555 #endif /*(_WIN32_WINNT >= 0x0600)*/ 556 #if (_WIN32_WINNT >= 0x0601) 557 BusTypeVirtual = 0xE, 558 BusTypeFileBackedVirtual = 0xF, 559 BusTypeSpaces = 0x10, 560 BusTypeNvme = 0x11, 561 BusTypeSCM = 0x12, 562 BusTypeUfs = 0x13, 563 #endif /*(_WIN32_WINNT >= 0x0601)*/ 564 BusTypeMax, 565 BusTypeMaxReserved = 0x7F 566 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; 567 568 #define SupportsDeviceSharing(BusType) ((BusType == BusTypeScsi) || (BusType == BusTypeFibre) || (BusType == BusTypeiScsi) || (BusType == BusTypeSas) || (BusType == BusTypeSpaces)) 569 570 typedef struct _DEVICE_MEDIA_INFO { 571 union { 572 struct { 573 LARGE_INTEGER Cylinders; 574 STORAGE_MEDIA_TYPE MediaType; 575 DWORD TracksPerCylinder; 576 DWORD SectorsPerTrack; 577 DWORD BytesPerSector; 578 DWORD NumberMediaSides; 579 DWORD MediaCharacteristics; 580 } DiskInfo; 581 struct { 582 LARGE_INTEGER Cylinders; 583 STORAGE_MEDIA_TYPE MediaType; 584 DWORD TracksPerCylinder; 585 DWORD SectorsPerTrack; 586 DWORD BytesPerSector; 587 DWORD NumberMediaSides; 588 DWORD MediaCharacteristics; 589 } RemovableDiskInfo; 590 struct { 591 STORAGE_MEDIA_TYPE MediaType; 592 DWORD MediaCharacteristics; 593 DWORD CurrentBlockSize; 594 STORAGE_BUS_TYPE BusType; 595 union { 596 struct { 597 BYTE MediumType; 598 BYTE DensityCode; 599 } ScsiInformation; 600 } BusSpecificData; 601 } TapeInfo; 602 } DeviceSpecific; 603 } DEVICE_MEDIA_INFO,*PDEVICE_MEDIA_INFO; 604 605 typedef struct _GET_MEDIA_TYPES { 606 DWORD DeviceType; 607 DWORD MediaInfoCount; 608 DEVICE_MEDIA_INFO MediaInfo[1]; 609 } GET_MEDIA_TYPES,*PGET_MEDIA_TYPES; 610 611 typedef struct _STORAGE_PREDICT_FAILURE { 612 DWORD PredictFailure; 613 BYTE VendorSpecific[512]; 614 } STORAGE_PREDICT_FAILURE,*PSTORAGE_PREDICT_FAILURE; 615 616 typedef struct _STORAGE_FAILURE_PREDICTION_CONFIG { 617 DWORD Version; 618 DWORD Size; 619 BOOLEAN Set; 620 BOOLEAN Enabled; 621 WORD Reserved; 622 } STORAGE_FAILURE_PREDICTION_CONFIG,*PSTORAGE_FAILURE_PREDICTION_CONFIG; 623 624 #define STORAGE_FAILURE_PREDICTION_CONFIG_V1 1 625 626 #ifdef __cplusplus 627 } 628 #endif 629 #endif /* _NTDDSTOR_H_ */ 630 631 632 #ifndef _NTDDDISK_H_ 633 #define _NTDDDISK_H_ 634 635 #define IOCTL_DISK_BASE FILE_DEVICE_DISK 636 #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE,0x0000,METHOD_BUFFERED,FILE_ANY_ACCESS) 637 #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS) 638 #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 639 #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0003,METHOD_BUFFERED,FILE_READ_ACCESS) 640 #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 641 #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0005,METHOD_BUFFERED,FILE_ANY_ACCESS) 642 #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 643 #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 644 #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE,0x0008,METHOD_BUFFERED,FILE_ANY_ACCESS) 645 #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE,0x0009,METHOD_BUFFERED,FILE_ANY_ACCESS) 646 #define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE,0x000a,METHOD_BUFFERED,FILE_ANY_ACCESS) 647 #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE,0x000b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 648 #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000c,METHOD_BUFFERED,FILE_ANY_ACCESS) 649 #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE,0x000d,METHOD_BUFFERED,FILE_ANY_ACCESS) 650 #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE,0x000e,METHOD_BUFFERED,FILE_ANY_ACCESS) 651 #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000f,METHOD_BUFFERED,FILE_ANY_ACCESS) 652 #define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE,0x0010,METHOD_BUFFERED,FILE_ANY_ACCESS) 653 #define IOCTL_DISK_PERFORMANCE_OFF CTL_CODE(IOCTL_DISK_BASE,0x0018,METHOD_BUFFERED,FILE_ANY_ACCESS) 654 #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE,0x0011,METHOD_BUFFERED,FILE_ANY_ACCESS) 655 656 #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE,0x0020,METHOD_BUFFERED,FILE_READ_ACCESS) 657 #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE,0x0021,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 658 #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE,0x0022,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 659 660 #define IOCTL_DISK_GET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0012,METHOD_BUFFERED,FILE_ANY_ACCESS) 661 #define IOCTL_DISK_SET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0013,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 662 #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0014,METHOD_BUFFERED,FILE_ANY_ACCESS) 663 #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0015,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 664 #define IOCTL_DISK_CREATE_DISK CTL_CODE(IOCTL_DISK_BASE,0x0016,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 665 #define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(IOCTL_DISK_BASE,0x0017,METHOD_BUFFERED,FILE_READ_ACCESS) 666 #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE,0x0028,METHOD_BUFFERED,FILE_ANY_ACCESS) 667 668 #define IOCTL_DISK_REASSIGN_BLOCKS_EX CTL_CODE(IOCTL_DISK_BASE,0x0029,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 669 #define IOCTL_DISK_UPDATE_DRIVE_SIZE CTL_CODE(IOCTL_DISK_BASE,0x0032,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 670 #define IOCTL_DISK_GROW_PARTITION CTL_CODE(IOCTL_DISK_BASE,0x0034,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 671 #define IOCTL_DISK_GET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0035,METHOD_BUFFERED,FILE_READ_ACCESS) 672 #define IOCTL_DISK_SET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0036,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 673 #define OBSOLETE_DISK_GET_WRITE_CACHE_STATE CTL_CODE(IOCTL_DISK_BASE,0x0037,METHOD_BUFFERED,FILE_READ_ACCESS) 674 #define IOCTL_DISK_DELETE_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0040,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 675 #define IOCTL_DISK_UPDATE_PROPERTIES CTL_CODE(IOCTL_DISK_BASE,0x0050,METHOD_BUFFERED,FILE_ANY_ACCESS) 676 #define IOCTL_DISK_RESET_SNAPSHOT_INFO CTL_CODE(IOCTL_DISK_BASE,0x0084,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 677 #define IOCTL_DISK_FORMAT_DRIVE CTL_CODE(IOCTL_DISK_BASE,0x00f3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 678 #define IOCTL_DISK_SENSE_DEVICE CTL_CODE(IOCTL_DISK_BASE,0x00f8,METHOD_BUFFERED,FILE_ANY_ACCESS) 679 #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS) 680 #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS) 681 #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS) 682 #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS) 683 #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS) 684 #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS) 685 #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS) 686 #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS) 687 #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) 688 689 #define PARTITION_ENTRY_UNUSED 0x00 690 #define PARTITION_FAT_12 0x01 691 #define PARTITION_XENIX_1 0x02 692 #define PARTITION_XENIX_2 0x03 693 #define PARTITION_FAT_16 0x04 694 #define PARTITION_EXTENDED 0x05 695 #define PARTITION_HUGE 0x06 696 #define PARTITION_IFS 0x07 697 #define PARTITION_OS2BOOTMGR 0x0A 698 #define PARTITION_FAT32 0x0B 699 #define PARTITION_FAT32_XINT13 0x0C 700 #define PARTITION_XINT13 0x0E 701 #define PARTITION_XINT13_EXTENDED 0x0F 702 #define PARTITION_PREP 0x41 703 #define PARTITION_LDM 0x42 704 #define PARTITION_UNIX 0x63 705 706 #define VALID_NTFT 0xC0 707 708 #define PARTITION_NTFT 0x80 709 710 #define IsRecognizedPartition(PartitionType) (((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_FAT_12)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_IFS)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_HUGE)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_FAT32)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_FAT32_XINT13)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_XINT13)) || ((PartitionType)==PARTITION_FAT_12) || ((PartitionType)==PARTITION_FAT_16) || ((PartitionType)==PARTITION_IFS) || ((PartitionType)==PARTITION_HUGE) || ((PartitionType)==PARTITION_FAT32) || ((PartitionType)==PARTITION_FAT32_XINT13) || ((PartitionType)==PARTITION_XINT13)) 711 #define IsContainerPartition(PartitionType) ((PartitionType==PARTITION_EXTENDED) || (PartitionType==PARTITION_XINT13_EXTENDED)) 712 #define IsFTPartition(PartitionType) (((PartitionType)&PARTITION_NTFT) && IsRecognizedPartition(PartitionType)) 713 714 typedef enum _MEDIA_TYPE { 715 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, 716 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, 717 F3_230Mb_512,F8_256_128,F3_200Mb_512,F3_240M_512,F3_32M_512 718 } MEDIA_TYPE,*PMEDIA_TYPE; 719 720 typedef struct _FORMAT_PARAMETERS { 721 MEDIA_TYPE MediaType; 722 DWORD StartCylinderNumber; 723 DWORD EndCylinderNumber; 724 DWORD StartHeadNumber; 725 DWORD EndHeadNumber; 726 } FORMAT_PARAMETERS,*PFORMAT_PARAMETERS; 727 728 typedef WORD BAD_TRACK_NUMBER; 729 typedef WORD *PBAD_TRACK_NUMBER; 730 731 typedef struct _FORMAT_EX_PARAMETERS { 732 MEDIA_TYPE MediaType; 733 DWORD StartCylinderNumber; 734 DWORD EndCylinderNumber; 735 DWORD StartHeadNumber; 736 DWORD EndHeadNumber; 737 WORD FormatGapLength; 738 WORD SectorsPerTrack; 739 WORD SectorNumber[1]; 740 } FORMAT_EX_PARAMETERS,*PFORMAT_EX_PARAMETERS; 741 742 typedef struct _DISK_GEOMETRY { 743 LARGE_INTEGER Cylinders; 744 MEDIA_TYPE MediaType; 745 DWORD TracksPerCylinder; 746 DWORD SectorsPerTrack; 747 DWORD BytesPerSector; 748 } DISK_GEOMETRY,*PDISK_GEOMETRY; 749 750 #define WMI_DISK_GEOMETRY_GUID { 0x25007f51,0x57c2,0x11d1,{ 0xa5,0x28,0x0,0xa0,0xc9,0x6,0x29,0x10 } } 751 752 typedef struct _PARTITION_INFORMATION { 753 LARGE_INTEGER StartingOffset; 754 LARGE_INTEGER PartitionLength; 755 DWORD HiddenSectors; 756 DWORD PartitionNumber; 757 BYTE PartitionType; 758 BOOLEAN BootIndicator; 759 BOOLEAN RecognizedPartition; 760 BOOLEAN RewritePartition; 761 } PARTITION_INFORMATION,*PPARTITION_INFORMATION; 762 763 typedef struct _SET_PARTITION_INFORMATION { 764 BYTE PartitionType; 765 } SET_PARTITION_INFORMATION,*PSET_PARTITION_INFORMATION; 766 767 typedef struct _DRIVE_LAYOUT_INFORMATION { 768 DWORD PartitionCount; 769 DWORD Signature; 770 PARTITION_INFORMATION PartitionEntry[1]; 771 } DRIVE_LAYOUT_INFORMATION,*PDRIVE_LAYOUT_INFORMATION; 772 773 typedef struct _VERIFY_INFORMATION { 774 LARGE_INTEGER StartingOffset; 775 DWORD Length; 776 } VERIFY_INFORMATION,*PVERIFY_INFORMATION; 777 778 typedef struct _REASSIGN_BLOCKS { 779 WORD Reserved; 780 WORD Count; 781 DWORD BlockNumber[1]; 782 } REASSIGN_BLOCKS,*PREASSIGN_BLOCKS; 783 784 #include <pshpack1.h> 785 typedef struct _REASSIGN_BLOCKS_EX { 786 WORD Reserved; 787 WORD Count; 788 LARGE_INTEGER BlockNumber[1]; 789 } REASSIGN_BLOCKS_EX,*PREASSIGN_BLOCKS_EX; 790 #include <poppack.h> 791 792 typedef enum _PARTITION_STYLE { 793 PARTITION_STYLE_MBR,PARTITION_STYLE_GPT,PARTITION_STYLE_RAW 794 } PARTITION_STYLE; 795 796 typedef struct _PARTITION_INFORMATION_GPT { 797 GUID PartitionType; 798 GUID PartitionId; 799 DWORD64 Attributes; 800 WCHAR Name [36]; 801 } PARTITION_INFORMATION_GPT,*PPARTITION_INFORMATION_GPT; 802 803 #define GPT_ATTRIBUTE_PLATFORM_REQUIRED (0x0000000000000001) 804 805 #define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x8000000000000000) 806 #define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN (0x4000000000000000) 807 #define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY (0x2000000000000000) 808 #define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY (0x1000000000000000) 809 810 typedef struct _PARTITION_INFORMATION_MBR { 811 BYTE PartitionType; 812 BOOLEAN BootIndicator; 813 BOOLEAN RecognizedPartition; 814 DWORD HiddenSectors; 815 #if NTDDI_VERSION > NTDDI_WINBLUE 816 GUID PartitionId; 817 #endif 818 } PARTITION_INFORMATION_MBR,*PPARTITION_INFORMATION_MBR; 819 820 typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR; 821 typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT; 822 823 typedef struct _SET_PARTITION_INFORMATION_EX { 824 PARTITION_STYLE PartitionStyle; 825 __C89_NAMELESS union { 826 SET_PARTITION_INFORMATION_MBR Mbr; 827 SET_PARTITION_INFORMATION_GPT Gpt; 828 } DUMMYUNIONNAME; 829 } SET_PARTITION_INFORMATION_EX,*PSET_PARTITION_INFORMATION_EX; 830 831 typedef struct _CREATE_DISK_GPT { 832 GUID DiskId; 833 DWORD MaxPartitionCount; 834 } CREATE_DISK_GPT,*PCREATE_DISK_GPT; 835 836 typedef struct _CREATE_DISK_MBR { 837 DWORD Signature; 838 } CREATE_DISK_MBR,*PCREATE_DISK_MBR; 839 840 typedef struct _CREATE_DISK { 841 PARTITION_STYLE PartitionStyle; 842 __C89_NAMELESS union { 843 CREATE_DISK_MBR Mbr; 844 CREATE_DISK_GPT Gpt; 845 } DUMMYUNIONNAME; 846 } CREATE_DISK,*PCREATE_DISK; 847 848 typedef struct _GET_LENGTH_INFORMATION { 849 LARGE_INTEGER Length; 850 } GET_LENGTH_INFORMATION,*PGET_LENGTH_INFORMATION; 851 852 typedef struct _PARTITION_INFORMATION_EX { 853 PARTITION_STYLE PartitionStyle; 854 LARGE_INTEGER StartingOffset; 855 LARGE_INTEGER PartitionLength; 856 DWORD PartitionNumber; 857 BOOLEAN RewritePartition; 858 #if NTDDI_VERSION >= NTDDI_WIN10_RS3 859 BOOLEAN IsServicePartition; 860 #endif 861 __C89_NAMELESS union { 862 PARTITION_INFORMATION_MBR Mbr; 863 PARTITION_INFORMATION_GPT Gpt; 864 } DUMMYUNIONNAME; 865 } PARTITION_INFORMATION_EX,*PPARTITION_INFORMATION_EX; 866 867 typedef struct _DRIVE_LAYOUT_INFORMATION_GPT { 868 GUID DiskId; 869 LARGE_INTEGER StartingUsableOffset; 870 LARGE_INTEGER UsableLength; 871 DWORD MaxPartitionCount; 872 } DRIVE_LAYOUT_INFORMATION_GPT,*PDRIVE_LAYOUT_INFORMATION_GPT; 873 874 typedef struct _DRIVE_LAYOUT_INFORMATION_MBR { 875 DWORD Signature; 876 } DRIVE_LAYOUT_INFORMATION_MBR,*PDRIVE_LAYOUT_INFORMATION_MBR; 877 878 typedef struct _DRIVE_LAYOUT_INFORMATION_EX { 879 DWORD PartitionStyle; 880 DWORD PartitionCount; 881 __C89_NAMELESS union { 882 DRIVE_LAYOUT_INFORMATION_MBR Mbr; 883 DRIVE_LAYOUT_INFORMATION_GPT Gpt; 884 } DUMMYUNIONNAME; 885 PARTITION_INFORMATION_EX PartitionEntry[1]; 886 } DRIVE_LAYOUT_INFORMATION_EX,*PDRIVE_LAYOUT_INFORMATION_EX; 887 888 typedef enum _DETECTION_TYPE { 889 DetectNone,DetectInt13,DetectExInt13 890 } DETECTION_TYPE; 891 892 typedef struct _DISK_INT13_INFO { 893 WORD DriveSelect; 894 DWORD MaxCylinders; 895 WORD SectorsPerTrack; 896 WORD MaxHeads; 897 WORD NumberDrives; 898 } DISK_INT13_INFO,*PDISK_INT13_INFO; 899 900 typedef struct _DISK_EX_INT13_INFO { 901 WORD ExBufferSize; 902 WORD ExFlags; 903 DWORD ExCylinders; 904 DWORD ExHeads; 905 DWORD ExSectorsPerTrack; 906 DWORD64 ExSectorsPerDrive; 907 WORD ExSectorSize; 908 WORD ExReserved; 909 } DISK_EX_INT13_INFO,*PDISK_EX_INT13_INFO; 910 911 typedef struct _DISK_DETECTION_INFO { 912 DWORD SizeOfDetectInfo; 913 DETECTION_TYPE DetectionType; 914 __C89_NAMELESS union { 915 __C89_NAMELESS struct { 916 DISK_INT13_INFO Int13; 917 DISK_EX_INT13_INFO ExInt13; 918 } DUMMYSTRUCTNAME; 919 } DUMMYUNIONNAME; 920 } DISK_DETECTION_INFO,*PDISK_DETECTION_INFO; 921 922 typedef struct _DISK_PARTITION_INFO { 923 DWORD SizeOfPartitionInfo; 924 PARTITION_STYLE PartitionStyle; 925 __C89_NAMELESS union { 926 struct { 927 DWORD Signature; 928 DWORD CheckSum; 929 } Mbr; 930 struct { 931 GUID DiskId; 932 } Gpt; 933 } DUMMYUNIONNAME; 934 } DISK_PARTITION_INFO,*PDISK_PARTITION_INFO; 935 936 #define DiskGeometryGetPartition(Geometry) ((PDISK_PARTITION_INFO)((Geometry)->Data)) 937 #define DiskGeometryGetDetect(Geometry) ((PDISK_DETECTION_INFO)(((DWORD_PTR)DiskGeometryGetPartition(Geometry)+ DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo))) 938 939 typedef struct _DISK_GEOMETRY_EX { 940 DISK_GEOMETRY Geometry; 941 LARGE_INTEGER DiskSize; 942 BYTE Data[1]; 943 } DISK_GEOMETRY_EX,*PDISK_GEOMETRY_EX; 944 945 typedef struct _DISK_CONTROLLER_NUMBER { 946 DWORD ControllerNumber; 947 DWORD DiskNumber; 948 } DISK_CONTROLLER_NUMBER,*PDISK_CONTROLLER_NUMBER; 949 950 typedef enum { 951 EqualPriority,KeepPrefetchedData,KeepReadData 952 } DISK_CACHE_RETENTION_PRIORITY; 953 954 typedef struct _DISK_CACHE_INFORMATION { 955 BOOLEAN ParametersSavable; 956 BOOLEAN ReadCacheEnabled; 957 BOOLEAN WriteCacheEnabled; 958 DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; 959 DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; 960 WORD DisablePrefetchTransferLength; 961 BOOLEAN PrefetchScalar; 962 __C89_NAMELESS union { 963 struct { 964 WORD Minimum; 965 WORD Maximum; 966 WORD MaximumBlocks; 967 } ScalarPrefetch; 968 struct { 969 WORD Minimum; 970 WORD Maximum; 971 } BlockPrefetch; 972 } DUMMYUNIONNAME; 973 } DISK_CACHE_INFORMATION,*PDISK_CACHE_INFORMATION; 974 975 typedef struct _DISK_GROW_PARTITION { 976 DWORD PartitionNumber; 977 LARGE_INTEGER BytesToGrow; 978 } DISK_GROW_PARTITION,*PDISK_GROW_PARTITION; 979 980 #define HIST_NO_OF_BUCKETS 24 981 982 typedef struct _HISTOGRAM_BUCKET { 983 DWORD Reads; 984 DWORD Writes; 985 } HISTOGRAM_BUCKET,*PHISTOGRAM_BUCKET; 986 987 #define HISTOGRAM_BUCKET_SIZE sizeof(HISTOGRAM_BUCKET) 988 989 typedef struct _DISK_HISTOGRAM { 990 LARGE_INTEGER DiskSize; 991 LARGE_INTEGER Start; 992 LARGE_INTEGER End; 993 LARGE_INTEGER Average; 994 LARGE_INTEGER AverageRead; 995 LARGE_INTEGER AverageWrite; 996 DWORD Granularity; 997 DWORD Size; 998 DWORD ReadCount; 999 DWORD WriteCount; 1000 PHISTOGRAM_BUCKET Histogram; 1001 } DISK_HISTOGRAM,*PDISK_HISTOGRAM; 1002 1003 #define DISK_HISTOGRAM_SIZE sizeof(DISK_HISTOGRAM) 1004 1005 typedef struct _DISK_PERFORMANCE { 1006 LARGE_INTEGER BytesRead; 1007 LARGE_INTEGER BytesWritten; 1008 LARGE_INTEGER ReadTime; 1009 LARGE_INTEGER WriteTime; 1010 LARGE_INTEGER IdleTime; 1011 DWORD ReadCount; 1012 DWORD WriteCount; 1013 DWORD QueueDepth; 1014 DWORD SplitCount; 1015 LARGE_INTEGER QueryTime; 1016 DWORD StorageDeviceNumber; 1017 WCHAR StorageManagerName[8]; 1018 } DISK_PERFORMANCE,*PDISK_PERFORMANCE; 1019 1020 typedef struct _DISK_RECORD { 1021 LARGE_INTEGER ByteOffset; 1022 LARGE_INTEGER StartTime; 1023 LARGE_INTEGER EndTime; 1024 PVOID VirtualAddress; 1025 DWORD NumberOfBytes; 1026 BYTE DeviceNumber; 1027 BOOLEAN ReadRequest; 1028 } DISK_RECORD,*PDISK_RECORD; 1029 1030 typedef struct _DISK_LOGGING { 1031 BYTE Function; 1032 PVOID BufferAddress; 1033 DWORD BufferSize; 1034 } DISK_LOGGING,*PDISK_LOGGING; 1035 1036 #define DISK_LOGGING_START 0 1037 #define DISK_LOGGING_STOP 1 1038 #define DISK_LOGGING_DUMP 2 1039 #define DISK_BINNING 3 1040 1041 typedef enum _BIN_TYPES { 1042 RequestSize,RequestLocation 1043 } BIN_TYPES; 1044 1045 typedef struct _BIN_RANGE { 1046 LARGE_INTEGER StartValue; 1047 LARGE_INTEGER Length; 1048 } BIN_RANGE,*PBIN_RANGE; 1049 1050 typedef struct _PERF_BIN { 1051 DWORD NumberOfBins; 1052 DWORD TypeOfBin; 1053 BIN_RANGE BinsRanges[1]; 1054 } PERF_BIN,*PPERF_BIN; 1055 1056 typedef struct _BIN_COUNT { 1057 BIN_RANGE BinRange; 1058 DWORD BinCount; 1059 } BIN_COUNT,*PBIN_COUNT; 1060 1061 typedef struct _BIN_RESULTS { 1062 DWORD NumberOfBins; 1063 BIN_COUNT BinCounts[1]; 1064 } BIN_RESULTS,*PBIN_RESULTS; 1065 1066 #include <pshpack1.h> 1067 typedef struct _GETVERSIONINPARAMS { 1068 BYTE bVersion; 1069 BYTE bRevision; 1070 BYTE bReserved; 1071 BYTE bIDEDeviceMap; 1072 DWORD fCapabilities; 1073 DWORD dwReserved[4]; 1074 } GETVERSIONINPARAMS,*PGETVERSIONINPARAMS,*LPGETVERSIONINPARAMS; 1075 #include <poppack.h> 1076 1077 #define CAP_ATA_ID_CMD 1 1078 #define CAP_ATAPI_ID_CMD 2 1079 #define CAP_SMART_CMD 4 1080 1081 #include <pshpack1.h> 1082 typedef struct _IDEREGS { 1083 BYTE bFeaturesReg; 1084 BYTE bSectorCountReg; 1085 BYTE bSectorNumberReg; 1086 BYTE bCylLowReg; 1087 BYTE bCylHighReg; 1088 BYTE bDriveHeadReg; 1089 BYTE bCommandReg; 1090 BYTE bReserved; 1091 } IDEREGS,*PIDEREGS,*LPIDEREGS; 1092 #include <poppack.h> 1093 1094 #define ATAPI_ID_CMD 0xA1 1095 #define ID_CMD 0xEC 1096 #define SMART_CMD 0xB0 1097 1098 #define SMART_CYL_LOW 0x4F 1099 #define SMART_CYL_HI 0xC2 1100 1101 #include <pshpack1.h> 1102 typedef struct _SENDCMDINPARAMS { 1103 DWORD cBufferSize; 1104 IDEREGS irDriveRegs; 1105 BYTE bDriveNumber; 1106 BYTE bReserved[3]; 1107 DWORD dwReserved[4]; 1108 BYTE bBuffer[1]; 1109 } SENDCMDINPARAMS,*PSENDCMDINPARAMS,*LPSENDCMDINPARAMS; 1110 #include <poppack.h> 1111 1112 #include <pshpack1.h> 1113 typedef struct _DRIVERSTATUS { 1114 BYTE bDriverError; 1115 BYTE bIDEError; 1116 BYTE bReserved[2]; 1117 DWORD dwReserved[2]; 1118 } DRIVERSTATUS,*PDRIVERSTATUS,*LPDRIVERSTATUS; 1119 #include <poppack.h> 1120 1121 #define SMART_NO_ERROR 0 1122 #define SMART_IDE_ERROR 1 1123 #define SMART_INVALID_FLAG 2 1124 #define SMART_INVALID_COMMAND 3 1125 #define SMART_INVALID_BUFFER 4 1126 #define SMART_INVALID_DRIVE 5 1127 #define SMART_INVALID_IOCTL 6 1128 #define SMART_ERROR_NO_MEM 7 1129 #define SMART_INVALID_REGISTER 8 1130 #define SMART_NOT_SUPPORTED 9 1131 #define SMART_NO_IDE_DEVICE 10 1132 1133 #define SMART_OFFLINE_ROUTINE_OFFLINE 0 1134 #define SMART_SHORT_SELFTEST_OFFLINE 1 1135 #define SMART_EXTENDED_SELFTEST_OFFLINE 2 1136 #define SMART_ABORT_OFFLINE_SELFTEST 127 1137 #define SMART_SHORT_SELFTEST_CAPTIVE 129 1138 #define SMART_EXTENDED_SELFTEST_CAPTIVE 130 1139 1140 #include <pshpack1.h> 1141 typedef struct _SENDCMDOUTPARAMS { 1142 DWORD cBufferSize; 1143 DRIVERSTATUS DriverStatus; 1144 BYTE bBuffer[1]; 1145 } SENDCMDOUTPARAMS,*PSENDCMDOUTPARAMS,*LPSENDCMDOUTPARAMS; 1146 #include <poppack.h> 1147 1148 #define READ_ATTRIBUTE_BUFFER_SIZE 512 1149 #define IDENTIFY_BUFFER_SIZE 512 1150 #define READ_THRESHOLD_BUFFER_SIZE 512 1151 #define SMART_LOG_SECTOR_SIZE 512 1152 1153 #define READ_ATTRIBUTES 0xD0 1154 #define READ_THRESHOLDS 0xD1 1155 #define ENABLE_DISABLE_AUTOSAVE 0xD2 1156 #define SAVE_ATTRIBUTE_VALUES 0xD3 1157 #define EXECUTE_OFFLINE_DIAGS 0xD4 1158 #define SMART_READ_LOG 0xD5 1159 #define SMART_WRITE_LOG 0xd6 1160 #define ENABLE_SMART 0xD8 1161 #define DISABLE_SMART 0xD9 1162 #define RETURN_SMART_STATUS 0xDA 1163 #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB 1164 1165 #endif /* _NTDDDISK_H_ */ 1166 1167 1168 #define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER 1169 #define IOCTL_CHANGER_GET_PARAMETERS CTL_CODE(IOCTL_CHANGER_BASE,0x0000,METHOD_BUFFERED,FILE_READ_ACCESS) 1170 #define IOCTL_CHANGER_GET_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS) 1171 #define IOCTL_CHANGER_GET_PRODUCT_DATA CTL_CODE(IOCTL_CHANGER_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS) 1172 #define IOCTL_CHANGER_SET_ACCESS CTL_CODE(IOCTL_CHANGER_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 1173 #define IOCTL_CHANGER_GET_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0005,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 1174 #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS) 1175 #define IOCTL_CHANGER_SET_POSITION CTL_CODE(IOCTL_CHANGER_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS) 1176 #define IOCTL_CHANGER_EXCHANGE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0008,METHOD_BUFFERED,FILE_READ_ACCESS) 1177 #define IOCTL_CHANGER_MOVE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0009,METHOD_BUFFERED,FILE_READ_ACCESS) 1178 #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT CTL_CODE(IOCTL_CHANGER_BASE,0x000A,METHOD_BUFFERED,FILE_READ_ACCESS) 1179 #define IOCTL_CHANGER_QUERY_VOLUME_TAGS CTL_CODE(IOCTL_CHANGER_BASE,0x000B,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 1180 1181 #define MAX_VOLUME_ID_SIZE 36 1182 #define MAX_VOLUME_TEMPLATE_SIZE 40 1183 1184 #define VENDOR_ID_LENGTH 8 1185 #define PRODUCT_ID_LENGTH 16 1186 #define REVISION_LENGTH 4 1187 #define SERIAL_NUMBER_LENGTH 32 1188 1189 typedef enum _ELEMENT_TYPE { 1190 AllElements,ChangerTransport,ChangerSlot,ChangerIEPort,ChangerDrive,ChangerDoor,ChangerKeypad,ChangerMaxElement 1191 } ELEMENT_TYPE,*PELEMENT_TYPE; 1192 1193 typedef struct _CHANGER_ELEMENT { 1194 ELEMENT_TYPE ElementType; 1195 DWORD ElementAddress; 1196 } CHANGER_ELEMENT,*PCHANGER_ELEMENT; 1197 1198 typedef struct _CHANGER_ELEMENT_LIST { 1199 CHANGER_ELEMENT Element; 1200 DWORD NumberOfElements; 1201 } CHANGER_ELEMENT_LIST ,*PCHANGER_ELEMENT_LIST; 1202 1203 #define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001 1204 #define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002 1205 #define CHANGER_CLOSE_IEPORT 0x00000004 1206 #define CHANGER_OPEN_IEPORT 0x00000008 1207 1208 #define CHANGER_STATUS_NON_VOLATILE 0x00000010 1209 #define CHANGER_EXCHANGE_MEDIA 0x00000020 1210 #define CHANGER_CLEANER_SLOT 0x00000040 1211 #define CHANGER_LOCK_UNLOCK 0x00000080 1212 1213 #define CHANGER_CARTRIDGE_MAGAZINE 0x00000100 1214 #define CHANGER_MEDIUM_FLIP 0x00000200 1215 #define CHANGER_POSITION_TO_ELEMENT 0x00000400 1216 #define CHANGER_REPORT_IEPORT_STATE 0x00000800 1217 1218 #define CHANGER_STORAGE_DRIVE 0x00001000 1219 #define CHANGER_STORAGE_IEPORT 0x00002000 1220 #define CHANGER_STORAGE_SLOT 0x00004000 1221 #define CHANGER_STORAGE_TRANSPORT 0x00008000 1222 1223 #define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000 1224 1225 #define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000 1226 1227 #define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000 1228 #define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000 1229 1230 #define CHANGER_VOLUME_IDENTIFICATION 0x00100000 1231 #define CHANGER_VOLUME_SEARCH 0x00200000 1232 #define CHANGER_VOLUME_ASSERT 0x00400000 1233 #define CHANGER_VOLUME_REPLACE 0x00800000 1234 #define CHANGER_VOLUME_UNDEFINE 0x01000000 1235 1236 #define CHANGER_SERIAL_NUMBER_VALID 0x04000000 1237 1238 #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000 1239 #define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000 1240 #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000 1241 1242 #define CHANGER_RESERVED_BIT 0x80000000 1243 1244 #define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT 0x80000001 1245 #define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE 0x80000002 1246 #define CHANGER_CLEANER_AUTODISMOUNT 0x80000004 1247 #define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008 1248 #define CHANGER_SLOTS_USE_TRAYS 0x80000010 1249 #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020 1250 #define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040 1251 #define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080 1252 #define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100 1253 #define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200 1254 #define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400 1255 1256 #define CHANGER_TO_TRANSPORT 0x01 1257 #define CHANGER_TO_SLOT 0x02 1258 #define CHANGER_TO_IEPORT 0x04 1259 #define CHANGER_TO_DRIVE 0x08 1260 1261 #define LOCK_UNLOCK_IEPORT 0x01 1262 #define LOCK_UNLOCK_DOOR 0x02 1263 #define LOCK_UNLOCK_KEYPAD 0x04 1264 1265 typedef struct _GET_CHANGER_PARAMETERS { 1266 DWORD Size; 1267 WORD NumberTransportElements; 1268 WORD NumberStorageElements; 1269 WORD NumberCleanerSlots; 1270 WORD NumberIEElements; 1271 WORD NumberDataTransferElements; 1272 WORD NumberOfDoors; 1273 WORD FirstSlotNumber; 1274 WORD FirstDriveNumber; 1275 WORD FirstTransportNumber; 1276 WORD FirstIEPortNumber; 1277 WORD FirstCleanerSlotAddress; 1278 WORD MagazineSize; 1279 DWORD DriveCleanTimeout; 1280 DWORD Features0; 1281 DWORD Features1; 1282 BYTE MoveFromTransport; 1283 BYTE MoveFromSlot; 1284 BYTE MoveFromIePort; 1285 BYTE MoveFromDrive; 1286 BYTE ExchangeFromTransport; 1287 BYTE ExchangeFromSlot; 1288 BYTE ExchangeFromIePort; 1289 BYTE ExchangeFromDrive; 1290 BYTE LockUnlockCapabilities; 1291 BYTE PositionCapabilities; 1292 BYTE Reserved1[2]; 1293 DWORD Reserved2[2]; 1294 } GET_CHANGER_PARAMETERS,*PGET_CHANGER_PARAMETERS; 1295 1296 typedef struct _CHANGER_PRODUCT_DATA { 1297 BYTE VendorId[VENDOR_ID_LENGTH]; 1298 BYTE ProductId[PRODUCT_ID_LENGTH]; 1299 BYTE Revision[REVISION_LENGTH]; 1300 BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; 1301 BYTE DeviceType; 1302 } CHANGER_PRODUCT_DATA,*PCHANGER_PRODUCT_DATA; 1303 1304 #define LOCK_ELEMENT 0 1305 #define UNLOCK_ELEMENT 1 1306 #define EXTEND_IEPORT 2 1307 #define RETRACT_IEPORT 3 1308 1309 typedef struct _CHANGER_SET_ACCESS { 1310 CHANGER_ELEMENT Element; 1311 DWORD Control; 1312 } CHANGER_SET_ACCESS,*PCHANGER_SET_ACCESS; 1313 1314 typedef struct _CHANGER_READ_ELEMENT_STATUS { 1315 CHANGER_ELEMENT_LIST ElementList; 1316 BOOLEAN VolumeTagInfo; 1317 } CHANGER_READ_ELEMENT_STATUS,*PCHANGER_READ_ELEMENT_STATUS; 1318 1319 typedef struct _CHANGER_ELEMENT_STATUS { 1320 CHANGER_ELEMENT Element; 1321 CHANGER_ELEMENT SrcElementAddress; 1322 DWORD Flags; 1323 DWORD ExceptionCode; 1324 BYTE TargetId; 1325 BYTE Lun; 1326 WORD Reserved; 1327 BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 1328 BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 1329 } CHANGER_ELEMENT_STATUS,*PCHANGER_ELEMENT_STATUS; 1330 1331 typedef struct _CHANGER_ELEMENT_STATUS_EX { 1332 CHANGER_ELEMENT Element; 1333 CHANGER_ELEMENT SrcElementAddress; 1334 DWORD Flags; 1335 DWORD ExceptionCode; 1336 BYTE TargetId; 1337 BYTE Lun; 1338 WORD Reserved; 1339 BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 1340 BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 1341 BYTE VendorIdentification[VENDOR_ID_LENGTH]; 1342 BYTE ProductIdentification[PRODUCT_ID_LENGTH]; 1343 BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; 1344 } CHANGER_ELEMENT_STATUS_EX,*PCHANGER_ELEMENT_STATUS_EX; 1345 1346 #define ELEMENT_STATUS_FULL 0x00000001 1347 #define ELEMENT_STATUS_IMPEXP 0x00000002 1348 #define ELEMENT_STATUS_EXCEPT 0x00000004 1349 #define ELEMENT_STATUS_ACCESS 0x00000008 1350 #define ELEMENT_STATUS_EXENAB 0x00000010 1351 #define ELEMENT_STATUS_INENAB 0x00000020 1352 1353 #define ELEMENT_STATUS_PRODUCT_DATA 0x00000040 1354 1355 #define ELEMENT_STATUS_LUN_VALID 0x00001000 1356 #define ELEMENT_STATUS_ID_VALID 0x00002000 1357 #define ELEMENT_STATUS_NOT_BUS 0x00008000 1358 #define ELEMENT_STATUS_INVERT 0x00400000 1359 #define ELEMENT_STATUS_SVALID 0x00800000 1360 1361 #define ELEMENT_STATUS_PVOLTAG 0x10000000 1362 #define ELEMENT_STATUS_AVOLTAG 0x20000000 1363 1364 #define ERROR_LABEL_UNREADABLE 0x00000001 1365 #define ERROR_LABEL_QUESTIONABLE 0x00000002 1366 #define ERROR_SLOT_NOT_PRESENT 0x00000004 1367 #define ERROR_DRIVE_NOT_INSTALLED 0x00000008 1368 #define ERROR_TRAY_MALFUNCTION 0x00000010 1369 #define ERROR_INIT_STATUS_NEEDED 0x00000011 1370 #define ERROR_UNHANDLED_ERROR 0xFFFFFFFF 1371 1372 typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS { 1373 CHANGER_ELEMENT_LIST ElementList; 1374 BOOLEAN BarCodeScan; 1375 } CHANGER_INITIALIZE_ELEMENT_STATUS,*PCHANGER_INITIALIZE_ELEMENT_STATUS; 1376 1377 typedef struct _CHANGER_SET_POSITION { 1378 CHANGER_ELEMENT Transport; 1379 CHANGER_ELEMENT Destination; 1380 BOOLEAN Flip; 1381 } CHANGER_SET_POSITION,*PCHANGER_SET_POSITION; 1382 1383 typedef struct _CHANGER_EXCHANGE_MEDIUM { 1384 CHANGER_ELEMENT Transport; 1385 CHANGER_ELEMENT Source; 1386 CHANGER_ELEMENT Destination1; 1387 CHANGER_ELEMENT Destination2; 1388 BOOLEAN Flip1; 1389 BOOLEAN Flip2; 1390 } CHANGER_EXCHANGE_MEDIUM,*PCHANGER_EXCHANGE_MEDIUM; 1391 1392 typedef struct _CHANGER_MOVE_MEDIUM { 1393 CHANGER_ELEMENT Transport; 1394 CHANGER_ELEMENT Source; 1395 CHANGER_ELEMENT Destination; 1396 BOOLEAN Flip; 1397 } CHANGER_MOVE_MEDIUM,*PCHANGER_MOVE_MEDIUM; 1398 1399 typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION { 1400 CHANGER_ELEMENT StartingElement; 1401 DWORD ActionCode; 1402 BYTE VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE]; 1403 } CHANGER_SEND_VOLUME_TAG_INFORMATION,*PCHANGER_SEND_VOLUME_TAG_INFORMATION; 1404 1405 typedef struct _READ_ELEMENT_ADDRESS_INFO { 1406 DWORD NumberOfElements; 1407 CHANGER_ELEMENT_STATUS ElementStatus[1]; 1408 } READ_ELEMENT_ADDRESS_INFO,*PREAD_ELEMENT_ADDRESS_INFO; 1409 1410 #define SEARCH_ALL 0x0 1411 #define SEARCH_PRIMARY 0x1 1412 #define SEARCH_ALTERNATE 0x2 1413 #define SEARCH_ALL_NO_SEQ 0x4 1414 #define SEARCH_PRI_NO_SEQ 0x5 1415 #define SEARCH_ALT_NO_SEQ 0x6 1416 1417 #define ASSERT_PRIMARY 0x8 1418 #define ASSERT_ALTERNATE 0x9 1419 1420 #define REPLACE_PRIMARY 0xA 1421 #define REPLACE_ALTERNATE 0xB 1422 1423 #define UNDEFINE_PRIMARY 0xC 1424 #define UNDEFINE_ALTERNATE 0xD 1425 1426 typedef enum _CHANGER_DEVICE_PROBLEM_TYPE { 1427 DeviceProblemNone,DeviceProblemHardware,DeviceProblemCHMError,DeviceProblemDoorOpen,DeviceProblemCalibrationError,DeviceProblemTargetFailure, 1428 DeviceProblemCHMMoveError,DeviceProblemCHMZeroError,DeviceProblemCartridgeInsertError,DeviceProblemPositionError,DeviceProblemSensorError, 1429 DeviceProblemCartridgeEjectError,DeviceProblemGripperError,DeviceProblemDriveError 1430 } CHANGER_DEVICE_PROBLEM_TYPE,*PCHANGER_DEVICE_PROBLEM_TYPE; 1431 1432 #define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS) 1433 1434 #define IOCTL_SERENUM_EXPOSE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,128,METHOD_BUFFERED,FILE_ANY_ACCESS) 1435 #define IOCTL_SERENUM_REMOVE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,129,METHOD_BUFFERED,FILE_ANY_ACCESS) 1436 #define IOCTL_SERENUM_PORT_DESC CTL_CODE(FILE_DEVICE_SERENUM,130,METHOD_BUFFERED,FILE_ANY_ACCESS) 1437 #define IOCTL_SERENUM_GET_PORT_NAME CTL_CODE(FILE_DEVICE_SERENUM,131,METHOD_BUFFERED,FILE_ANY_ACCESS) 1438 1439 #define SERIAL_LSRMST_ESCAPE ((BYTE)0x00) 1440 1441 #define SERIAL_LSRMST_LSR_DATA ((BYTE)0x01) 1442 1443 #define SERIAL_LSRMST_LSR_NODATA ((BYTE)0x02) 1444 1445 #define SERIAL_LSRMST_MST ((BYTE)0x03) 1446 1447 #define SERIAL_IOC_FCR_FIFO_ENABLE ((DWORD)0x00000001) 1448 #define SERIAL_IOC_FCR_RCVR_RESET ((DWORD)0x00000002) 1449 #define SERIAL_IOC_FCR_XMIT_RESET ((DWORD)0x00000004) 1450 #define SERIAL_IOC_FCR_DMA_MODE ((DWORD)0x00000008) 1451 #define SERIAL_IOC_FCR_RES1 ((DWORD)0x00000010) 1452 #define SERIAL_IOC_FCR_RES2 ((DWORD)0x00000020) 1453 #define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB ((DWORD)0x00000040) 1454 #define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB ((DWORD)0x00000080) 1455 1456 #define SERIAL_IOC_MCR_DTR ((DWORD)0x00000001) 1457 #define SERIAL_IOC_MCR_RTS ((DWORD)0x00000002) 1458 #define SERIAL_IOC_MCR_OUT1 ((DWORD)0x00000004) 1459 #define SERIAL_IOC_MCR_OUT2 ((DWORD)0x00000008) 1460 #define SERIAL_IOC_MCR_LOOP ((DWORD)0x00000010) 1461 1462 #ifndef _FILESYSTEMFSCTL_ 1463 #define _FILESYSTEMFSCTL_ 1464 1465 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,0,METHOD_BUFFERED,FILE_ANY_ACCESS) 1466 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,1,METHOD_BUFFERED,FILE_ANY_ACCESS) 1467 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,2,METHOD_BUFFERED,FILE_ANY_ACCESS) 1468 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,3,METHOD_BUFFERED,FILE_ANY_ACCESS) 1469 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,4,METHOD_BUFFERED,FILE_ANY_ACCESS) 1470 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,5,METHOD_BUFFERED,FILE_ANY_ACCESS) 1471 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,6,METHOD_BUFFERED,FILE_ANY_ACCESS) 1472 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,7,METHOD_BUFFERED,FILE_ANY_ACCESS) 1473 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,8,METHOD_BUFFERED,FILE_ANY_ACCESS) 1474 1475 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,10,METHOD_BUFFERED,FILE_ANY_ACCESS) 1476 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,11,METHOD_BUFFERED,FILE_ANY_ACCESS) 1477 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,12,METHOD_BUFFERED,FILE_ANY_ACCESS) 1478 1479 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,14,METHOD_NEITHER,FILE_ANY_ACCESS) 1480 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,15,METHOD_BUFFERED,FILE_ANY_ACCESS) 1481 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) 1482 1483 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,19,METHOD_NEITHER,FILE_ANY_ACCESS) 1484 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED 1485 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,20,METHOD_BUFFERED,FILE_ANY_ACCESS) 1486 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,21,METHOD_BUFFERED,FILE_ANY_ACCESS) 1487 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM,22,METHOD_BUFFERED,FILE_ANY_ACCESS) 1488 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,23,METHOD_BUFFERED,FILE_ANY_ACCESS) 1489 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,24,METHOD_BUFFERED,FILE_ANY_ACCESS) 1490 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25,METHOD_BUFFERED,FILE_ANY_ACCESS) 1491 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,26,METHOD_BUFFERED,FILE_ANY_ACCESS) 1492 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27,METHOD_NEITHER,FILE_ANY_ACCESS) 1493 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28,METHOD_NEITHER,FILE_ANY_ACCESS) 1494 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1495 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,30,METHOD_BUFFERED,FILE_ANY_ACCESS) 1496 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,32,METHOD_NEITHER,FILE_ANY_ACCESS) 1497 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,35,METHOD_NEITHER,FILE_ANY_ACCESS) 1498 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,38,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1499 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,39,METHOD_BUFFERED,FILE_ANY_ACCESS) 1500 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,40,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1501 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,41,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1502 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,42,METHOD_BUFFERED,FILE_ANY_ACCESS) 1503 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,43,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1504 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_ANY_ACCESS) 1505 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,45,METHOD_NEITHER,FILE_READ_DATA) 1506 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,46,METHOD_NEITHER,FILE_ANY_ACCESS) 1507 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,47,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1508 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,48,METHOD_BUFFERED,FILE_ANY_ACCESS) 1509 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,49,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1510 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,50,METHOD_BUFFERED,FILE_WRITE_DATA) 1511 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,51,METHOD_NEITHER,FILE_READ_DATA) 1512 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,52,METHOD_BUFFERED,FILE_WRITE_DATA) 1513 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,53,METHOD_NEITHER,FILE_ANY_ACCESS) 1514 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,54,METHOD_NEITHER,FILE_ANY_ACCESS) 1515 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,55,METHOD_NEITHER,FILE_SPECIAL_ACCESS) 1516 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,56,METHOD_NEITHER,FILE_SPECIAL_ACCESS) 1517 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,57,METHOD_NEITHER,FILE_ANY_ACCESS) 1518 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,58,METHOD_NEITHER,FILE_ANY_ACCESS) 1519 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,59,METHOD_NEITHER,FILE_ANY_ACCESS) 1520 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS) 1521 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,61,METHOD_BUFFERED,FILE_ANY_ACCESS) 1522 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,62,METHOD_BUFFERED,FILE_ANY_ACCESS) 1523 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,63,METHOD_BUFFERED,FILE_ANY_ACCESS) 1524 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,64,METHOD_BUFFERED,FILE_ANY_ACCESS) 1525 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,65,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) 1526 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM,66,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) 1527 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,68,METHOD_NEITHER,FILE_READ_DATA | FILE_WRITE_DATA) 1528 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,69,METHOD_NEITHER,FILE_ANY_ACCESS) 1529 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM,71,METHOD_OUT_DIRECT,FILE_READ_DATA) 1530 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM,72,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1531 1532 typedef struct _PATHNAME_BUFFER { 1533 DWORD PathNameLength; 1534 WCHAR Name[1]; 1535 } PATHNAME_BUFFER,*PPATHNAME_BUFFER; 1536 1537 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER { 1538 BYTE First0x24BytesOfBootSector[0x24]; 1539 } FSCTL_QUERY_FAT_BPB_BUFFER,*PFSCTL_QUERY_FAT_BPB_BUFFER; 1540 1541 typedef struct { 1542 LARGE_INTEGER VolumeSerialNumber; 1543 LARGE_INTEGER NumberSectors; 1544 LARGE_INTEGER TotalClusters; 1545 LARGE_INTEGER FreeClusters; 1546 LARGE_INTEGER TotalReserved; 1547 DWORD BytesPerSector; 1548 DWORD BytesPerCluster; 1549 DWORD BytesPerFileRecordSegment; 1550 DWORD ClustersPerFileRecordSegment; 1551 LARGE_INTEGER MftValidDataLength; 1552 LARGE_INTEGER MftStartLcn; 1553 LARGE_INTEGER Mft2StartLcn; 1554 LARGE_INTEGER MftZoneStart; 1555 LARGE_INTEGER MftZoneEnd; 1556 } NTFS_VOLUME_DATA_BUFFER,*PNTFS_VOLUME_DATA_BUFFER; 1557 1558 typedef struct { 1559 DWORD ByteCount; 1560 WORD MajorVersion; 1561 WORD MinorVersion; 1562 } NTFS_EXTENDED_VOLUME_DATA,*PNTFS_EXTENDED_VOLUME_DATA; 1563 1564 typedef struct { 1565 LARGE_INTEGER StartingLcn; 1566 } STARTING_LCN_INPUT_BUFFER,*PSTARTING_LCN_INPUT_BUFFER; 1567 1568 typedef struct { 1569 LARGE_INTEGER StartingLcn; 1570 LARGE_INTEGER BitmapSize; 1571 BYTE Buffer[1]; 1572 } VOLUME_BITMAP_BUFFER,*PVOLUME_BITMAP_BUFFER; 1573 1574 typedef struct { 1575 LARGE_INTEGER StartingVcn; 1576 } STARTING_VCN_INPUT_BUFFER,*PSTARTING_VCN_INPUT_BUFFER; 1577 1578 typedef struct RETRIEVAL_POINTERS_BUFFER { 1579 DWORD ExtentCount; 1580 LARGE_INTEGER StartingVcn; 1581 struct { 1582 LARGE_INTEGER NextVcn; 1583 LARGE_INTEGER Lcn; 1584 } Extents[1]; 1585 } RETRIEVAL_POINTERS_BUFFER,*PRETRIEVAL_POINTERS_BUFFER; 1586 1587 typedef struct { 1588 LARGE_INTEGER FileReferenceNumber; 1589 } NTFS_FILE_RECORD_INPUT_BUFFER,*PNTFS_FILE_RECORD_INPUT_BUFFER; 1590 1591 typedef struct { 1592 LARGE_INTEGER FileReferenceNumber; 1593 DWORD FileRecordLength; 1594 BYTE FileRecordBuffer[1]; 1595 } NTFS_FILE_RECORD_OUTPUT_BUFFER,*PNTFS_FILE_RECORD_OUTPUT_BUFFER; 1596 1597 typedef struct { 1598 HANDLE FileHandle; 1599 LARGE_INTEGER StartingVcn; 1600 LARGE_INTEGER StartingLcn; 1601 DWORD ClusterCount; 1602 } MOVE_FILE_DATA,*PMOVE_FILE_DATA; 1603 1604 typedef struct _MOVE_FILE_RECORD_DATA { 1605 HANDLE FileHandle; 1606 LARGE_INTEGER SourceFileRecord; 1607 LARGE_INTEGER TargetFileRecord; 1608 } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA; 1609 1610 #ifdef _WIN64 1611 typedef struct _MOVE_FILE_DATA32 { 1612 UINT32 FileHandle; 1613 LARGE_INTEGER StartingVcn; 1614 LARGE_INTEGER StartingLcn; 1615 DWORD ClusterCount; 1616 } MOVE_FILE_DATA32,*PMOVE_FILE_DATA32; 1617 #endif 1618 1619 typedef struct { 1620 DWORD Restart; 1621 SID Sid; 1622 } FIND_BY_SID_DATA,*PFIND_BY_SID_DATA; 1623 1624 typedef struct { 1625 DWORD NextEntryOffset; 1626 DWORD FileIndex; 1627 DWORD FileNameLength; 1628 WCHAR FileName[1]; 1629 } FIND_BY_SID_OUTPUT,*PFIND_BY_SID_OUTPUT; 1630 1631 typedef struct { 1632 DWORDLONG StartFileReferenceNumber; 1633 USN LowUsn; 1634 USN HighUsn; 1635 } MFT_ENUM_DATA,*PMFT_ENUM_DATA; 1636 1637 typedef struct { 1638 DWORDLONG MaximumSize; 1639 DWORDLONG AllocationDelta; 1640 } CREATE_USN_JOURNAL_DATA,*PCREATE_USN_JOURNAL_DATA; 1641 1642 typedef struct { 1643 USN StartUsn; 1644 DWORD ReasonMask; 1645 DWORD ReturnOnlyOnClose; 1646 DWORDLONG Timeout; 1647 DWORDLONG BytesToWaitFor; 1648 DWORDLONG UsnJournalID; 1649 } READ_USN_JOURNAL_DATA,*PREAD_USN_JOURNAL_DATA; 1650 1651 typedef struct { 1652 DWORD RecordLength; 1653 WORD MajorVersion; 1654 WORD MinorVersion; 1655 DWORDLONG FileReferenceNumber; 1656 DWORDLONG ParentFileReferenceNumber; 1657 USN Usn; 1658 LARGE_INTEGER TimeStamp; 1659 DWORD Reason; 1660 DWORD SourceInfo; 1661 DWORD SecurityId; 1662 DWORD FileAttributes; 1663 WORD FileNameLength; 1664 WORD FileNameOffset; 1665 WCHAR FileName[1]; 1666 } USN_RECORD,*PUSN_RECORD; 1667 1668 #define USN_PAGE_SIZE (0x1000) 1669 1670 #define USN_REASON_DATA_OVERWRITE (0x00000001) 1671 #define USN_REASON_DATA_EXTEND (0x00000002) 1672 #define USN_REASON_DATA_TRUNCATION (0x00000004) 1673 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010) 1674 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020) 1675 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040) 1676 #define USN_REASON_FILE_CREATE (0x00000100) 1677 #define USN_REASON_FILE_DELETE (0x00000200) 1678 #define USN_REASON_EA_CHANGE (0x00000400) 1679 #define USN_REASON_SECURITY_CHANGE (0x00000800) 1680 #define USN_REASON_RENAME_OLD_NAME (0x00001000) 1681 #define USN_REASON_RENAME_NEW_NAME (0x00002000) 1682 #define USN_REASON_INDEXABLE_CHANGE (0x00004000) 1683 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000) 1684 #define USN_REASON_HARD_LINK_CHANGE (0x00010000) 1685 #define USN_REASON_COMPRESSION_CHANGE (0x00020000) 1686 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000) 1687 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000) 1688 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000) 1689 #define USN_REASON_STREAM_CHANGE (0x00200000) 1690 #define USN_REASON_TRANSACTED_CHANGE (0x00400000) 1691 1692 #define USN_REASON_CLOSE (0x80000000) 1693 1694 typedef struct { 1695 DWORDLONG UsnJournalID; 1696 USN FirstUsn; 1697 USN NextUsn; 1698 USN LowestValidUsn; 1699 USN MaxUsn; 1700 DWORDLONG MaximumSize; 1701 DWORDLONG AllocationDelta; 1702 } USN_JOURNAL_DATA,*PUSN_JOURNAL_DATA; 1703 1704 typedef struct { 1705 DWORDLONG UsnJournalID; 1706 DWORD DeleteFlags; 1707 } DELETE_USN_JOURNAL_DATA,*PDELETE_USN_JOURNAL_DATA; 1708 1709 #define USN_DELETE_FLAG_DELETE (0x00000001) 1710 #define USN_DELETE_FLAG_NOTIFY (0x00000002) 1711 1712 #define USN_DELETE_VALID_FLAGS (0x00000003) 1713 1714 typedef struct { 1715 DWORD UsnSourceInfo; 1716 HANDLE VolumeHandle; 1717 DWORD HandleInfo; 1718 } MARK_HANDLE_INFO,*PMARK_HANDLE_INFO; 1719 1720 #ifdef _WIN64 1721 1722 typedef struct { 1723 DWORD UsnSourceInfo; 1724 UINT32 VolumeHandle; 1725 DWORD HandleInfo; 1726 1727 } MARK_HANDLE_INFO32,*PMARK_HANDLE_INFO32; 1728 #endif 1729 1730 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001) 1731 #define USN_SOURCE_AUXILIARY_DATA (0x00000002) 1732 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004) 1733 1734 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001) 1735 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004) 1736 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008) 1737 #define MARK_HANDLE_REALTIME (0x00000020) 1738 #define MARK_HANDLE_NOT_REALTIME (0x00000040) 1739 1740 typedef struct { 1741 ACCESS_MASK DesiredAccess; 1742 DWORD SecurityIds[1]; 1743 } BULK_SECURITY_TEST_DATA,*PBULK_SECURITY_TEST_DATA; 1744 1745 #define VOLUME_IS_DIRTY (0x00000001) 1746 #define VOLUME_UPGRADE_SCHEDULED (0x00000002) 1747 #define VOLUME_SESSION_OPEN (0x00000004) 1748 1749 typedef struct _FILE_PREFETCH { 1750 DWORD Type; 1751 DWORD Count; 1752 DWORDLONG Prefetch[1]; 1753 } FILE_PREFETCH,*PFILE_PREFETCH; 1754 1755 typedef struct _FILE_PREFETCH_EX { 1756 ULONG Type; 1757 ULONG Count; 1758 PVOID Context; 1759 ULONGLONG Prefetch[1]; 1760 } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX; 1761 1762 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1 1763 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2 1764 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3 1765 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4 1766 1767 #define FILE_PREFETCH_TYPE_MAX 0x4 1768 1769 typedef struct _FILESYSTEM_STATISTICS { 1770 WORD FileSystemType; 1771 WORD Version; 1772 DWORD SizeOfCompleteStructure; 1773 DWORD UserFileReads; 1774 DWORD UserFileReadBytes; 1775 DWORD UserDiskReads; 1776 DWORD UserFileWrites; 1777 DWORD UserFileWriteBytes; 1778 DWORD UserDiskWrites; 1779 DWORD MetaDataReads; 1780 DWORD MetaDataReadBytes; 1781 DWORD MetaDataDiskReads; 1782 DWORD MetaDataWrites; 1783 DWORD MetaDataWriteBytes; 1784 DWORD MetaDataDiskWrites; 1785 } FILESYSTEM_STATISTICS,*PFILESYSTEM_STATISTICS; 1786 1787 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1 1788 #define FILESYSTEM_STATISTICS_TYPE_FAT 2 1789 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3 1790 1791 typedef struct _FAT_STATISTICS { 1792 DWORD CreateHits; 1793 DWORD SuccessfulCreates; 1794 DWORD FailedCreates; 1795 DWORD NonCachedReads; 1796 DWORD NonCachedReadBytes; 1797 DWORD NonCachedWrites; 1798 DWORD NonCachedWriteBytes; 1799 DWORD NonCachedDiskReads; 1800 DWORD NonCachedDiskWrites; 1801 } FAT_STATISTICS,*PFAT_STATISTICS; 1802 1803 typedef struct _EXFAT_STATISTICS { 1804 DWORD CreateHits; 1805 DWORD SuccessfulCreates; 1806 DWORD FailedCreates; 1807 DWORD NonCachedReads; 1808 DWORD NonCachedReadBytes; 1809 DWORD NonCachedWrites; 1810 DWORD NonCachedWriteBytes; 1811 DWORD NonCachedDiskReads; 1812 DWORD NonCachedDiskWrites; 1813 } EXFAT_STATISTICS, *PEXFAT_STATISTICS; 1814 1815 typedef struct _NTFS_STATISTICS { 1816 DWORD LogFileFullExceptions; 1817 DWORD OtherExceptions; 1818 DWORD MftReads; 1819 DWORD MftReadBytes; 1820 DWORD MftWrites; 1821 DWORD MftWriteBytes; 1822 struct { 1823 WORD Write; 1824 WORD Create; 1825 WORD SetInfo; 1826 WORD Flush; 1827 } MftWritesUserLevel; 1828 WORD MftWritesFlushForLogFileFull; 1829 WORD MftWritesLazyWriter; 1830 WORD MftWritesUserRequest; 1831 DWORD Mft2Writes; 1832 DWORD Mft2WriteBytes; 1833 struct { 1834 WORD Write; 1835 WORD Create; 1836 WORD SetInfo; 1837 WORD Flush; 1838 } Mft2WritesUserLevel; 1839 WORD Mft2WritesFlushForLogFileFull; 1840 WORD Mft2WritesLazyWriter; 1841 WORD Mft2WritesUserRequest; 1842 DWORD RootIndexReads; 1843 DWORD RootIndexReadBytes; 1844 DWORD RootIndexWrites; 1845 DWORD RootIndexWriteBytes; 1846 DWORD BitmapReads; 1847 DWORD BitmapReadBytes; 1848 DWORD BitmapWrites; 1849 DWORD BitmapWriteBytes; 1850 WORD BitmapWritesFlushForLogFileFull; 1851 WORD BitmapWritesLazyWriter; 1852 WORD BitmapWritesUserRequest; 1853 struct { 1854 WORD Write; 1855 WORD Create; 1856 WORD SetInfo; 1857 } BitmapWritesUserLevel; 1858 DWORD MftBitmapReads; 1859 DWORD MftBitmapReadBytes; 1860 DWORD MftBitmapWrites; 1861 DWORD MftBitmapWriteBytes; 1862 WORD MftBitmapWritesFlushForLogFileFull; 1863 WORD MftBitmapWritesLazyWriter; 1864 WORD MftBitmapWritesUserRequest; 1865 struct { 1866 WORD Write; 1867 WORD Create; 1868 WORD SetInfo; 1869 WORD Flush; 1870 } MftBitmapWritesUserLevel; 1871 DWORD UserIndexReads; 1872 DWORD UserIndexReadBytes; 1873 DWORD UserIndexWrites; 1874 DWORD UserIndexWriteBytes; 1875 DWORD LogFileReads; 1876 DWORD LogFileReadBytes; 1877 DWORD LogFileWrites; 1878 DWORD LogFileWriteBytes; 1879 struct { 1880 DWORD Calls; 1881 DWORD Clusters; 1882 DWORD Hints; 1883 DWORD RunsReturned; 1884 DWORD HintsHonored; 1885 DWORD HintsClusters; 1886 DWORD Cache; 1887 DWORD CacheClusters; 1888 DWORD CacheMiss; 1889 DWORD CacheMissClusters; 1890 } Allocate; 1891 } NTFS_STATISTICS,*PNTFS_STATISTICS; 1892 1893 typedef struct _FILE_OBJECTID_BUFFER { 1894 BYTE ObjectId[16]; 1895 __C89_NAMELESS union { 1896 __C89_NAMELESS struct { 1897 BYTE BirthVolumeId[16]; 1898 BYTE BirthObjectId[16]; 1899 BYTE DomainId[16]; 1900 } DUMMYSTRUCTNAME; 1901 BYTE ExtendedInfo[48]; 1902 } DUMMYUNIONNAME; 1903 } FILE_OBJECTID_BUFFER,*PFILE_OBJECTID_BUFFER; 1904 1905 typedef struct _FILE_SET_SPARSE_BUFFER { 1906 BOOLEAN SetSparse; 1907 } FILE_SET_SPARSE_BUFFER,*PFILE_SET_SPARSE_BUFFER; 1908 1909 typedef struct _FILE_ZERO_DATA_INFORMATION { 1910 LARGE_INTEGER FileOffset; 1911 LARGE_INTEGER BeyondFinalZero; 1912 } FILE_ZERO_DATA_INFORMATION,*PFILE_ZERO_DATA_INFORMATION; 1913 1914 typedef struct _FILE_ALLOCATED_RANGE_BUFFER { 1915 LARGE_INTEGER FileOffset; 1916 LARGE_INTEGER Length; 1917 } FILE_ALLOCATED_RANGE_BUFFER,*PFILE_ALLOCATED_RANGE_BUFFER; 1918 1919 typedef struct _ENCRYPTION_BUFFER { 1920 DWORD EncryptionOperation; 1921 BYTE Private[1]; 1922 } ENCRYPTION_BUFFER,*PENCRYPTION_BUFFER; 1923 1924 #define FILE_SET_ENCRYPTION 0x00000001 1925 #define FILE_CLEAR_ENCRYPTION 0x00000002 1926 #define STREAM_SET_ENCRYPTION 0x00000003 1927 #define STREAM_CLEAR_ENCRYPTION 0x00000004 1928 1929 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004 1930 1931 typedef struct _DECRYPTION_STATUS_BUFFER { 1932 BOOLEAN NoEncryptedStreams; 1933 } DECRYPTION_STATUS_BUFFER,*PDECRYPTION_STATUS_BUFFER; 1934 1935 #define ENCRYPTION_FORMAT_DEFAULT (0x01) 1936 #define COMPRESSION_FORMAT_SPARSE (0x4000) 1937 1938 typedef struct _REQUEST_RAW_ENCRYPTED_DATA { 1939 LONGLONG FileOffset; 1940 DWORD Length; 1941 } REQUEST_RAW_ENCRYPTED_DATA,*PREQUEST_RAW_ENCRYPTED_DATA; 1942 1943 typedef struct _ENCRYPTED_DATA_INFO { 1944 DWORDLONG StartingFileOffset; 1945 DWORD OutputBufferOffset; 1946 DWORD BytesWithinFileSize; 1947 DWORD BytesWithinValidDataLength; 1948 WORD CompressionFormat; 1949 BYTE DataUnitShift; 1950 BYTE ChunkShift; 1951 BYTE ClusterShift; 1952 BYTE EncryptionFormat; 1953 WORD NumberOfDataBlocks; 1954 DWORD DataBlockSize[ANYSIZE_ARRAY]; 1955 } ENCRYPTED_DATA_INFO; 1956 typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO; 1957 1958 typedef struct _PLEX_READ_DATA_REQUEST { 1959 LARGE_INTEGER ByteOffset; 1960 DWORD ByteLength; 1961 DWORD PlexNumber; 1962 } PLEX_READ_DATA_REQUEST,*PPLEX_READ_DATA_REQUEST; 1963 1964 typedef struct _SI_COPYFILE { 1965 DWORD SourceFileNameLength; 1966 DWORD DestinationFileNameLength; 1967 DWORD Flags; 1968 WCHAR FileNameBuffer[1]; 1969 } SI_COPYFILE,*PSI_COPYFILE; 1970 1971 #define COPYFILE_SIS_LINK 0x0001 1972 #define COPYFILE_SIS_REPLACE 0x0002 1973 #define COPYFILE_SIS_FLAGS 0x0003 1974 1975 typedef struct _STORAGE_DESCRIPTOR_HEADER { 1976 DWORD Version; 1977 DWORD Size; 1978 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER; 1979 1980 typedef enum _STORAGE_PROPERTY_ID { 1981 StorageDeviceProperty = 0, 1982 StorageAdapterProperty, 1983 StorageDeviceIdProperty, 1984 StorageDeviceUniqueIdProperty, 1985 StorageDeviceWriteCacheProperty, 1986 StorageMiniportProperty, 1987 StorageAccessAlignmentProperty, 1988 StorageDeviceSeekPenaltyProperty, 1989 StorageDeviceTrimProperty, 1990 StorageDeviceWriteAggregationProperty, 1991 StorageDeviceDeviceTelemetryProperty, 1992 StorageDeviceLBProvisioningProperty, 1993 StorageDevicePowerProperty, 1994 StorageDeviceCopyOffloadProperty, 1995 StorageDeviceResiliencyProperty, 1996 StorageDeviceMediumProductType, 1997 StorageAdapterRpmbProperty, 1998 StorageAdapterCryptoProperty, 1999 StorageDeviceIoCapabilityProperty = 48, 2000 StorageAdapterProtocolSpecificProperty, 2001 StorageDeviceProtocolSpecificProperty, 2002 StorageAdapterTemperatureProperty, 2003 StorageDeviceTemperatureProperty, 2004 StorageAdapterPhysicalTopologyProperty, 2005 StorageDevicePhysicalTopologyProperty, 2006 StorageDeviceAttributesProperty, 2007 StorageDeviceManagementStatus, 2008 StorageAdapterSerialNumberProperty, 2009 StorageDeviceLocationProperty, 2010 StorageDeviceNumaProperty, 2011 StorageDeviceZonedDeviceProperty, 2012 StorageDeviceUnsafeShutdownCount, 2013 StorageDeviceEnduranceProperty, 2014 StorageDeviceLedStateProperty, 2015 StorageDeviceSelfEncryptionProperty = 64, 2016 StorageFruIdProperty 2017 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID; 2018 2019 typedef enum _STORAGE_QUERY_TYPE { 2020 PropertyStandardQuery = 0, 2021 PropertyExistsQuery = 1, 2022 PropertyMaskQuery = 2, 2023 PropertyQueryMaxDefined = 3 2024 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE; 2025 2026 typedef enum _STORAGE_SET_TYPE { 2027 PropertyStandardSet = 0, 2028 PropertyExistsSet, 2029 PropertySetMaxDefined 2030 } STORAGE_SET_TYPE, *PSTORAGE_SET_TYPE; 2031 2032 typedef struct _STORAGE_PROPERTY_QUERY { 2033 STORAGE_PROPERTY_ID PropertyId; 2034 STORAGE_QUERY_TYPE QueryType; 2035 BYTE AdditionalParameters[1]; 2036 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; 2037 2038 typedef struct _STORAGE_PROPERTY_SET { 2039 STORAGE_PROPERTY_ID PropertyId; 2040 STORAGE_SET_TYPE SetType; 2041 BYTE AdditionalParameters[1]; 2042 } STORAGE_PROPERTY_SET, *PSTORAGE_PROPERTY_SET; 2043 2044 typedef struct _STORAGE_DEVICE_DESCRIPTOR { 2045 DWORD Version; 2046 DWORD Size; 2047 BYTE DeviceType; 2048 BYTE DeviceTypeModifier; 2049 BOOLEAN RemovableMedia; 2050 BOOLEAN CommandQueueing; 2051 DWORD VendorIdOffset; 2052 DWORD ProductIdOffset; 2053 DWORD ProductRevisionOffset; 2054 DWORD SerialNumberOffset; 2055 STORAGE_BUS_TYPE BusType; 2056 DWORD RawPropertiesLength; 2057 BYTE RawDeviceProperties[1]; 2058 } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; 2059 2060 typedef struct _STORAGE_ADAPTER_DESCRIPTOR { 2061 DWORD Version; 2062 DWORD Size; 2063 DWORD MaximumTransferLength; 2064 DWORD MaximumPhysicalPages; 2065 DWORD AlignmentMask; 2066 BOOLEAN AdapterUsesPio; 2067 BOOLEAN AdapterScansDown; 2068 BOOLEAN CommandQueueing; 2069 BOOLEAN AcceleratedTransfer; 2070 BYTE BusType; 2071 WORD BusMajorVersion; 2072 WORD BusMinorVersion; 2073 #if NTDDI_VERSION >= NTDDI_WIN8 2074 BYTE SrbType; 2075 BYTE AddressType; 2076 #endif 2077 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR; 2078 2079 #if NTDDI_VERSION >= NTDDI_WIN8 2080 2081 #define NO_SRBTYPE_ADAPTER_DESCRIPTOR_SIZE UFIELD_OFFSET(STORAGE_ADAPTER_DESCRIPTOR, SrbType) 2082 2083 #ifndef SRB_TYPE_SCSI_REQUEST_BLOCK 2084 #define SRB_TYPE_SCSI_REQUEST_BLOCK 0 2085 #endif 2086 2087 #ifndef SRB_TYPE_STORAGE_REQUEST_BLOCK 2088 #define SRB_TYPE_STORAGE_REQUEST_BLOCK 1 2089 #endif 2090 2091 #ifndef STORAGE_ADDRESS_TYPE_BTL8 2092 #define STORAGE_ADDRESS_TYPE_BTL8 0 2093 #endif 2094 2095 #endif 2096 2097 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR { 2098 DWORD Version; 2099 DWORD Size; 2100 DWORD NumberOfIdentifiers; 2101 BYTE Identifiers[1]; 2102 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR; 2103 2104 typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION { 2105 ULONGLONG GptAttributes; 2106 } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION; 2107 2108 #if (_WIN32_WINNT >= 0x0600) 2109 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA) 2110 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA) 2111 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS) 2112 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS) 2113 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 2114 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,81, METHOD_BUFFERED, FILE_WRITE_DATA) 2115 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,82, METHOD_BUFFERED, FILE_READ_DATA) 2116 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,84, METHOD_BUFFERED, FILE_WRITE_DATA) 2117 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,85, METHOD_BUFFERED, FILE_WRITE_DATA) 2118 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,86, METHOD_BUFFERED, FILE_WRITE_DATA) 2119 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA) 2120 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,88, METHOD_BUFFERED, FILE_READ_DATA) 2121 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,89, METHOD_BUFFERED, FILE_WRITE_DATA) 2122 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,90,METHOD_BUFFERED, FILE_WRITE_DATA) 2123 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,91, METHOD_BUFFERED, FILE_READ_DATA) 2124 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,92, METHOD_BUFFERED, FILE_READ_DATA) 2125 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,94, METHOD_BUFFERED, FILE_WRITE_DATA) 2126 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA) 2127 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,99, METHOD_BUFFERED, FILE_READ_DATA) 2128 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 2129 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS) 2130 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS) 2131 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS) 2132 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS) 2133 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS) 2134 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 2135 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS) 2136 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS) 2137 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA) 2138 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA) 2139 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS) 2140 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS) 2141 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS) 2142 2143 #define SET_REPAIR_ENABLED 0x00000001 2144 #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002 2145 #define SET_REPAIR_DELETE_CROSSLINK 0x00000004 2146 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008 2147 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010 2148 2149 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER { 2150 BOOLEAN CloseDisc; 2151 } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER; 2152 2153 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER { 2154 BOOLEAN Disable; 2155 } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER; 2156 2157 typedef struct _FILE_QUERY_SPARING_BUFFER { 2158 ULONG SparingUnitBytes; 2159 BOOLEAN SoftwareSparing; 2160 ULONG TotalSpareBlocks; 2161 ULONG FreeSpareBlocks; 2162 } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER; 2163 2164 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER { 2165 LARGE_INTEGER DirectoryCount; 2166 LARGE_INTEGER FileCount; 2167 WORD FsFormatMajVersion; 2168 WORD FsFormatMinVersion; 2169 WCHAR FsFormatName[12]; 2170 LARGE_INTEGER FormatTime; 2171 LARGE_INTEGER LastUpdateTime; 2172 WCHAR CopyrightInfo[34]; 2173 WCHAR AbstractInfo[34]; 2174 WCHAR FormattingImplementationInfo[34]; 2175 WCHAR LastModifyingImplementationInfo[34]; 2176 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER; 2177 2178 #define SET_REPAIR_ENABLED 0x00000001 2179 #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002 2180 #define SET_REPAIR_DELETE_CROSSLINK 0x00000004 2181 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008 2182 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010 2183 #define SET_REPAIR_VALID_MASK 0x0000001F 2184 2185 typedef enum _SHRINK_VOLUME_REQUEST_TYPES { 2186 ShrinkPrepare = 1, 2187 ShrinkCommit, 2188 ShrinkAbort 2189 } SHRINK_VOLUME_REQUEST_TYPES; 2190 2191 typedef struct _SHRINK_VOLUME_INFORMATION { 2192 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType; 2193 DWORDLONG Flags; 2194 LONGLONG NewNumberOfSectors; 2195 } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION; 2196 2197 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001 2198 #define TXFS_RM_FLAG_RENAME_RM 0x00000002 2199 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004 2200 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008 2201 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010 2202 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020 2203 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040 2204 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080 2205 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100 2206 #define TXFS_RM_FLAG_GROW_LOG 0x00000400 2207 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800 2208 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000 2209 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000 2210 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000 2211 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000 2212 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000 2213 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000 2214 2215 #define TXFS_LOGGING_MODE_SIMPLE 1 2216 #define TXFS_LOGGING_MODE_FULL 2 2217 2218 #define TXFS_TRANSACTION_STATE_NONE 0 2219 #define TXFS_TRANSACTION_STATE_ACTIVE 1 2220 #define TXFS_TRANSACTION_STATE_PREPARED 2 2221 #define TXFS_TRANSACTION_STATE_NOTACTIVE 3 2222 2223 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \ 2224 TXFS_RM_FLAG_RENAME_RM | \ 2225 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 2226 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 2227 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 2228 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 2229 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 2230 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 2231 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 2232 TXFS_RM_FLAG_SHRINK_LOG | \ 2233 TXFS_RM_FLAG_GROW_LOG | \ 2234 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \ 2235 TXFS_RM_FLAG_PRESERVE_CHANGES | \ 2236 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 2237 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 2238 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 2239 TXFS_RM_FLAG_PREFER_AVAILABILITY) 2240 2241 typedef struct _TXFS_MODIFY_RM { 2242 ULONG Flags; 2243 ULONG LogContainerCountMax; 2244 ULONG LogContainerCountMin; 2245 ULONG LogContainerCount; 2246 ULONG LogGrowthIncrement; 2247 ULONG LogAutoShrinkPercentage; 2248 ULONGLONG Reserved; 2249 USHORT LoggingMode; 2250 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM; 2251 2252 #define TXFS_RM_STATE_NOT_STARTED 0 2253 #define TXFS_RM_STATE_STARTING 1 2254 #define TXFS_RM_STATE_ACTIVE 2 2255 #define TXFS_RM_STATE_SHUTTING_DOWN 3 2256 2257 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \ 2258 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 2259 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 2260 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 2261 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 2262 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 2263 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 2264 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 2265 TXFS_RM_FLAG_PREFER_AVAILABILITY) 2266 2267 typedef struct _TXFS_QUERY_RM_INFORMATION { 2268 ULONG BytesRequired; 2269 ULONGLONG TailLsn; 2270 ULONGLONG CurrentLsn; 2271 ULONGLONG ArchiveTailLsn; 2272 ULONGLONG LogContainerSize; 2273 LARGE_INTEGER HighestVirtualClock; 2274 ULONG LogContainerCount; 2275 ULONG LogContainerCountMax; 2276 ULONG LogContainerCountMin; 2277 ULONG LogGrowthIncrement; 2278 ULONG LogAutoShrinkPercentage; 2279 ULONG Flags; 2280 USHORT LoggingMode; 2281 USHORT Reserved; 2282 ULONG RmState; 2283 ULONGLONG LogCapacity; 2284 ULONGLONG LogFree; 2285 ULONGLONG TopsSize; 2286 ULONGLONG TopsUsed; 2287 ULONGLONG TransactionCount; 2288 ULONGLONG OnePCCount; 2289 ULONGLONG TwoPCCount; 2290 ULONGLONG NumberLogFileFull; 2291 ULONGLONG OldestTransactionAge; 2292 GUID RMName; 2293 ULONG TmLogPathOffset; 2294 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION; 2295 2296 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01 2297 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02 2298 2299 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \ 2300 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \ 2301 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK) 2302 2303 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION { 2304 LARGE_INTEGER LastVirtualClock; 2305 ULONGLONG LastRedoLsn; 2306 ULONGLONG HighestRecoveryLsn; 2307 ULONG Flags; 2308 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION; 2309 2310 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001 2311 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002 2312 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004 2313 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008 2314 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010 2315 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020 2316 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040 2317 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080 2318 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200 2319 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400 2320 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800 2321 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000 2322 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000 2323 2324 #define TXFS_START_RM_VALID_FLAGS \ 2325 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 2326 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 2327 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \ 2328 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 2329 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 2330 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 2331 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \ 2332 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 2333 TXFS_START_RM_FLAG_LOGGING_MODE | \ 2334 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \ 2335 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \ 2336 TXFS_START_RM_FLAG_PREFER_AVAILABILITY) 2337 2338 typedef struct _TXFS_START_RM_INFORMATION { 2339 ULONG Flags; 2340 ULONGLONG LogContainerSize; 2341 ULONG LogContainerCountMin; 2342 ULONG LogContainerCountMax; 2343 ULONG LogGrowthIncrement; 2344 ULONG LogAutoShrinkPercentage; 2345 ULONG TmLogPathOffset; 2346 USHORT TmLogPathLength; 2347 USHORT LoggingMode; 2348 USHORT LogPathLength; 2349 USHORT Reserved; 2350 WCHAR LogPath[1]; 2351 } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION; 2352 2353 typedef struct _TXFS_GET_METADATA_INFO_OUT { 2354 struct { 2355 LONGLONG LowPart; 2356 LONGLONG HighPart; 2357 } TxfFileId; 2358 GUID LockingTransaction; 2359 ULONGLONG LastLsn; 2360 ULONG TransactionState; 2361 } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT; 2362 2363 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001 2364 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002 2365 2366 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY { 2367 ULONGLONG Offset; 2368 ULONG NameFlags; 2369 LONGLONG FileId; 2370 ULONG Reserved1; 2371 ULONG Reserved2; 2372 LONGLONG Reserved3; 2373 WCHAR FileName[1]; 2374 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY; 2375 2376 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES { 2377 GUID KtmTransaction; 2378 ULONGLONG NumberOfFiles; 2379 ULONGLONG BufferSizeRequired; 2380 ULONGLONG Offset; 2381 } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES; 2382 2383 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY { 2384 GUID TransactionId; 2385 ULONG TransactionState; 2386 ULONG Reserved1; 2387 ULONG Reserved2; 2388 LONGLONG Reserved3; 2389 } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY; 2390 2391 typedef struct _TXFS_LIST_TRANSACTIONS { 2392 ULONGLONG NumberOfTransactions; 2393 ULONGLONG BufferSizeRequired; 2394 } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS; 2395 2396 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT { 2397 __C89_NAMELESS union { 2398 ULONG BufferLength; 2399 UCHAR Buffer; 2400 } DUMMYUNIONNAME; 2401 } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT; 2402 2403 typedef struct _TXFS_WRITE_BACKUP_INFORMATION { 2404 UCHAR Buffer; 2405 } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION; 2406 2407 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE 2408 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF 2409 2410 typedef struct _TXFS_GET_TRANSACTED_VERSION { 2411 ULONG ThisBaseVersion; 2412 ULONG LatestVersion; 2413 USHORT ThisMiniVersion; 2414 USHORT FirstMiniVersion; 2415 USHORT LatestMiniVersion; 2416 } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION; 2417 2418 #define TXFS_SAVEPOINT_SET 1 2419 #define TXFS_SAVEPOINT_ROLLBACK 2 2420 #define TXFS_SAVEPOINT_CLEAR 4 2421 #define TXFS_SAVEPOINT_CLEAR_ALL 16 2422 2423 typedef struct _TXFS_SAVEPOINT_INFORMATION { 2424 HANDLE KtmTransaction; 2425 ULONG ActionCode; 2426 ULONG SavepointId; 2427 } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION; 2428 2429 typedef struct _TXFS_CREATE_MINIVERSION_INFO { 2430 USHORT StructureVersion; 2431 USHORT StructureLength; 2432 ULONG BaseVersion; 2433 USHORT MiniVersion; 2434 } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO; 2435 2436 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO { 2437 BOOLEAN TransactionsActiveAtSnapshot; 2438 } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO; 2439 2440 typedef enum _WRITE_CACHE_TYPE { 2441 WriteCacheTypeUnknown = 0, 2442 WriteCacheTypeNone = 1, 2443 WriteCacheTypeWriteBack = 2, 2444 WriteCacheTypeWriteThrough = 3 2445 } WRITE_CACHE_TYPE; 2446 2447 typedef enum _WRITE_CACHE_ENABLE { 2448 WriteCacheEnableUnknown = 0, 2449 WriteCacheDisabled = 1, 2450 WriteCacheEnabled = 2 2451 } WRITE_CACHE_ENABLE; 2452 2453 typedef enum _WRITE_CACHE_CHANGE { 2454 WriteCacheChangeUnknown = 0, 2455 WriteCacheNotChangeable = 1, 2456 WriteCacheChangeable = 2 2457 } WRITE_CACHE_CHANGE; 2458 2459 typedef enum _WRITE_THROUGH { 2460 WriteThroughUnknown = 0, 2461 WriteThroughNotSupported = 1, 2462 WriteThroughSupported = 2 2463 } WRITE_THROUGH; 2464 2465 typedef struct _STORAGE_WRITE_CACHE_PROPERTY { 2466 DWORD Version; 2467 DWORD Size; 2468 WRITE_CACHE_TYPE WriteCacheType; 2469 WRITE_CACHE_ENABLE WriteCacheEnabled; 2470 WRITE_CACHE_CHANGE WriteCacheChangeable; 2471 WRITE_THROUGH WriteThroughSupported; 2472 BOOLEAN FlushCacheSupported; 2473 BOOLEAN UserDefinedPowerProtection; 2474 BOOLEAN NVCacheEnabled; 2475 } STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY; 2476 2477 typedef enum _STORAGE_PORT_CODE_SET { 2478 StoragePortCodeSetReserved = 0, 2479 StoragePortCodeSetStorport = 1, 2480 StoragePortCodeSetSCSIport = 2, 2481 StoragePortCodeSetSpaceport = 3, 2482 StoragePortCodeSetATAport = 4, 2483 StoragePortCodeSetUSBport = 5, 2484 StoragePortCodeSetSBP2port = 6, 2485 StoragePortCodeSetSDport = 7 2486 } STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET; 2487 2488 typedef struct _STORAGE_MINIPORT_DESCRIPTOR { 2489 DWORD Version; 2490 DWORD Size; 2491 STORAGE_PORT_CODE_SET Portdriver; 2492 BOOLEAN LUNResetSupported; 2493 BOOLEAN TargetResetSupported; 2494 } STORAGE_MINIPORT_DESCRIPTOR, *PSTORAGE_MINIPORT_DESCRIPTOR; 2495 2496 typedef enum _STORAGE_IDENTIFIER_CODE_SET { 2497 StorageIdCodeSetReserved = 0, 2498 StorageIdCodeSetBinary = 1, 2499 StorageIdCodeSetAscii = 2, 2500 StorageIdCodeSetUtf8 = 3 2501 } STORAGE_IDENTIFIER_CODE_SET, *PSTORAGE_IDENTIFIER_CODE_SET; 2502 2503 typedef enum _STORAGE_IDENTIFIER_TYPE { 2504 StorageIdTypeVendorSpecific = 0, 2505 StorageIdTypeVendorId = 1, 2506 StorageIdTypeEUI64 = 2, 2507 StorageIdTypeFCPHName = 3, 2508 StorageIdTypePortRelative = 4, 2509 StorageIdTypeTargetPortGroup = 5, 2510 StorageIdTypeLogicalUnitGroup = 6, 2511 StorageIdTypeMD5LogicalUnitIdentifier = 7, 2512 StorageIdTypeScsiNameString = 8 2513 } STORAGE_IDENTIFIER_TYPE, *PSTORAGE_IDENTIFIER_TYPE; 2514 2515 #define StorageIdTypeNAA StorageIdTypeFCPHName 2516 2517 typedef enum _STORAGE_ID_NAA_FORMAT { 2518 StorageIdNAAFormatIEEEExtended = 2, 2519 StorageIdNAAFormatIEEERegistered = 3, 2520 StorageIdNAAFormatIEEEERegisteredExtended = 5 2521 } STORAGE_ID_NAA_FORMAT, *PSTORAGE_ID_NAA_FORMAT; 2522 2523 typedef enum _STORAGE_ASSOCIATION_TYPE { 2524 StorageIdAssocDevice = 0, 2525 StorageIdAssocPort = 1, 2526 StorageIdAssocTarget = 2 2527 } STORAGE_ASSOCIATION_TYPE, *PSTORAGE_ASSOCIATION_TYPE; 2528 2529 typedef struct _STORAGE_IDENTIFIER { 2530 STORAGE_IDENTIFIER_CODE_SET CodeSet; 2531 STORAGE_IDENTIFIER_TYPE Type; 2532 USHORT IdentifierSize; 2533 USHORT NextOffset; 2534 STORAGE_ASSOCIATION_TYPE Association; 2535 UCHAR Identifier[1]; 2536 } STORAGE_IDENTIFIER, *PSTORAGE_IDENTIFIER; 2537 2538 typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR { 2539 DWORD Version; 2540 DWORD Size; 2541 DWORD BytesPerCacheLine; 2542 DWORD BytesOffsetForCacheAlignment; 2543 DWORD BytesPerLogicalSector; 2544 DWORD BytesPerPhysicalSector; 2545 DWORD BytesOffsetForSectorAlignment; 2546 } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR; 2547 2548 typedef struct _STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR { 2549 DWORD Version; 2550 DWORD Size; 2551 DWORD MediumProductType; 2552 } STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR, *PSTORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR; 2553 2554 #endif /*(_WIN32_WINNT >= 0x0600)*/ 2555 2556 typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR { 2557 DWORD Version; 2558 DWORD Size; 2559 BOOLEAN IncursSeekPenalty; 2560 } DEVICE_SEEK_PENALTY_DESCRIPTOR, *PDEVICE_SEEK_PENALTY_DESCRIPTOR; 2561 2562 typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR { 2563 ULONG Version; 2564 ULONG Size; 2565 BOOLEAN BenefitsFromWriteAggregation; 2566 } DEVICE_WRITE_AGGREGATION_DESCRIPTOR, *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR; 2567 2568 typedef struct _DEVICE_TRIM_DESCRIPTOR { 2569 DWORD Version; 2570 DWORD Size; 2571 BOOLEAN TrimEnabled; 2572 } DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR; 2573 2574 typedef struct _DEVICE_LB_PROVISIONING_DESCRIPTOR { 2575 DWORD Version; 2576 DWORD Size; 2577 BYTE ThinProvisioningEnabled : 1; 2578 BYTE ThinProvisioningReadZeros : 1; 2579 BYTE AnchorSupported : 3; 2580 BYTE UnmapGranularityAlignmentValid : 1; 2581 BYTE GetFreeSpaceSupported : 1; 2582 BYTE MapSupported : 1; 2583 BYTE Reserved1[7]; 2584 DWORDLONG OptimalUnmapGranularity; 2585 DWORDLONG UnmapGranularityAlignment; 2586 #if NTDDI_VERSION >= NTDDI_WINBLUE 2587 DWORD MaxUnmapLbaCount; 2588 DWORD MaxUnmapBlockDescriptorCount; 2589 #endif 2590 } DEVICE_LB_PROVISIONING_DESCRIPTOR, *PDEVICE_LB_PROVISIONING_DESCRIPTOR; 2591 2592 #define DEVICE_LB_PROVISIONING_DESCRIPTOR_V1_SIZE RTL_SIZEOF_THROUGH_FIELD(DEVICE_LB_PROVISIONING_DESCRIPTOR, UnmapGranularityAlignment) 2593 2594 typedef struct _STORAGE_LB_PROVISIONING_MAP_RESOURCES { 2595 DWORD Size; 2596 DWORD Version; 2597 BYTE AvailableMappingResourcesValid : 1; 2598 BYTE UsedMappingResourcesValid : 1; 2599 BYTE Reserved0 : 6; 2600 BYTE Reserved1[3]; 2601 BYTE AvailableMappingResourcesScope : 2; 2602 BYTE UsedMappingResourcesScope : 2; 2603 BYTE Reserved2 : 4; 2604 BYTE Reserved3[3]; 2605 DWORDLONG AvailableMappingResources; 2606 DWORDLONG UsedMappingResources; 2607 } STORAGE_LB_PROVISIONING_MAP_RESOURCES, *PSTORAGE_LB_PROVISIONING_MAP_RESOURCES; 2608 2609 typedef struct _DEVICE_POWER_DESCRIPTOR { 2610 DWORD Version; 2611 DWORD Size; 2612 BOOLEAN DeviceAttentionSupported; 2613 BOOLEAN AsynchronousNotificationSupported; 2614 BOOLEAN IdlePowerManagementEnabled; 2615 BOOLEAN D3ColdEnabled; 2616 BOOLEAN D3ColdSupported; 2617 BOOLEAN NoVerifyDuringIdlePower; 2618 BYTE Reserved[2]; 2619 DWORD IdleTimeoutInMS; 2620 } DEVICE_POWER_DESCRIPTOR, *PDEVICE_POWER_DESCRIPTOR; 2621 2622 typedef struct _DEVICE_COPY_OFFLOAD_DESCRIPTOR { 2623 DWORD Version; 2624 DWORD Size; 2625 DWORD MaximumTokenLifetime; 2626 DWORD DefaultTokenLifetime; 2627 DWORDLONG MaximumTransferSize; 2628 DWORDLONG OptimalTransferCount; 2629 DWORD MaximumDataDescriptors; 2630 DWORD MaximumTransferLengthPerDescriptor; 2631 DWORD OptimalTransferLengthPerDescriptor; 2632 WORD OptimalTransferLengthGranularity; 2633 BYTE Reserved[2]; 2634 } DEVICE_COPY_OFFLOAD_DESCRIPTOR, *PDEVICE_COPY_OFFLOAD_DESCRIPTOR; 2635 2636 typedef struct _STORAGE_DEVICE_RESILIENCY_DESCRIPTOR { 2637 DWORD Version; 2638 DWORD Size; 2639 DWORD NameOffset; 2640 DWORD NumberOfLogicalCopies; 2641 DWORD NumberOfPhysicalCopies; 2642 DWORD PhysicalDiskRedundancy; 2643 DWORD NumberOfColumns; 2644 DWORD Interleave; 2645 } STORAGE_DEVICE_RESILIENCY_DESCRIPTOR, *PSTORAGE_DEVICE_RESILIENCY_DESCRIPTOR; 2646 2647 typedef enum _STORAGE_RPMB_FRAME_TYPE { 2648 StorageRpmbFrameTypeUnknown = 0, 2649 StorageRpmbFrameTypeStandard, 2650 StorageRpmbFrameTypeMax 2651 } STORAGE_RPMB_FRAME_TYPE, *PSTORAGE_RPMB_FRAME_TYPE; 2652 2653 #define STORAGE_RPMB_DESCRIPTOR_VERSION_1 1 2654 2655 #define STORAGE_RPMB_MINIMUM_RELIABLE_WRITE_SIZE 512 2656 2657 typedef struct _STORAGE_RPMB_DESCRIPTOR { 2658 DWORD Version; 2659 DWORD Size; 2660 DWORD SizeInBytes; 2661 DWORD MaxReliableWriteSizeInBytes; 2662 STORAGE_RPMB_FRAME_TYPE FrameFormat; 2663 } STORAGE_RPMB_DESCRIPTOR, *PSTORAGE_RPMB_DESCRIPTOR; 2664 2665 typedef enum _STORAGE_CRYPTO_ALGORITHM_ID { 2666 StorageCryptoAlgorithmUnknown = 0, 2667 StorageCryptoAlgorithmXTSAES = 1, 2668 StorageCryptoAlgorithmBitlockerAESCBC, 2669 StorageCryptoAlgorithmAESECB, 2670 StorageCryptoAlgorithmESSIVAESCBC, 2671 StorageCryptoAlgorithmMax 2672 } STORAGE_CRYPTO_ALGORITHM_ID, *PSTORAGE_CRYPTO_ALGORITHM_ID; 2673 2674 typedef enum _STORAGE_CRYPTO_KEY_SIZE { 2675 StorageCryptoKeySizeUnknown = 0, 2676 StorageCryptoKeySize128Bits = 1, 2677 StorageCryptoKeySize192Bits, 2678 StorageCryptoKeySize256Bits, 2679 StorageCryptoKeySize512Bits 2680 } STORAGE_CRYPTO_KEY_SIZE, *PSTORAGE_CRYPTO_KEY_SIZE; 2681 2682 #define STORAGE_CRYPTO_CAPABILITY_VERSION_1 1 2683 2684 typedef struct _STORAGE_CRYPTO_CAPABILITY { 2685 DWORD Version; 2686 DWORD Size; 2687 DWORD CryptoCapabilityIndex; 2688 STORAGE_CRYPTO_ALGORITHM_ID AlgorithmId; 2689 STORAGE_CRYPTO_KEY_SIZE KeySize; 2690 DWORD DataUnitSizeBitmask; 2691 } STORAGE_CRYPTO_CAPABILITY, *PSTORAGE_CRYPTO_CAPABILITY; 2692 2693 #define STORAGE_CRYPTO_DESCRIPTOR_VERSION_1 1 2694 2695 typedef struct _STORAGE_CRYPTO_DESCRIPTOR { 2696 DWORD Version; 2697 DWORD Size; 2698 DWORD NumKeysSupported; 2699 DWORD NumCryptoCapabilities; 2700 STORAGE_CRYPTO_CAPABILITY CryptoCapabilities[ANYSIZE_ARRAY]; 2701 } STORAGE_CRYPTO_DESCRIPTOR, *PSTORAGE_CRYPTO_DESCRIPTOR; 2702 2703 #define STORAGE_TIER_NAME_LENGTH (256) 2704 #define STORAGE_TIER_DESCRIPTION_LENGTH (512) 2705 2706 #define STORAGE_TIER_FLAG_NO_SEEK_PENALTY (0x00020000) 2707 #define STORAGE_TIER_FLAG_WRITE_BACK_CACHE (0x00200000) 2708 #define STORAGE_TIER_FLAG_READ_CACHE (0x00400000) 2709 #define STORAGE_TIER_FLAG_PARITY (0x00800000) 2710 #define STORAGE_TIER_FLAG_SMR (0x01000000) 2711 2712 typedef enum _STORAGE_TIER_MEDIA_TYPE { 2713 StorageTierMediaTypeUnspecified = 0, 2714 StorageTierMediaTypeDisk = 1, 2715 StorageTierMediaTypeSsd = 2, 2716 StorageTierMediaTypeScm = 4, 2717 StorageTierMediaTypeMax 2718 } STORAGE_TIER_MEDIA_TYPE, *PSTORAGE_TIER_MEDIA_TYPE; 2719 2720 typedef enum _STORAGE_TIER_CLASS { 2721 StorageTierClassUnspecified = 0, 2722 StorageTierClassCapacity, 2723 StorageTierClassPerformance, 2724 StorageTierClassMax 2725 } STORAGE_TIER_CLASS, *PSTORAGE_TIER_CLASS; 2726 2727 typedef struct _STORAGE_TIER { 2728 GUID Id; 2729 WCHAR Name[STORAGE_TIER_NAME_LENGTH]; 2730 WCHAR Description[STORAGE_TIER_NAME_LENGTH]; 2731 DWORDLONG Flags; 2732 DWORDLONG ProvisionedCapacity; 2733 STORAGE_TIER_MEDIA_TYPE MediaType; 2734 STORAGE_TIER_CLASS Class; 2735 } STORAGE_TIER, *PSTORAGE_TIER; 2736 2737 typedef struct _STORAGE_DEVICE_TIERING_DESCRIPTOR { 2738 DWORD Version; 2739 DWORD Size; 2740 DWORD Flags; 2741 DWORD TotalNumberOfTiers; 2742 DWORD NumberOfTiersReturned; 2743 STORAGE_TIER Tiers[ANYSIZE_ARRAY]; 2744 } STORAGE_DEVICE_TIERING_DESCRIPTOR, *PSTORAGE_DEVICE_TIERING_DESCRIPTOR; 2745 2746 typedef struct _STORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR { 2747 DWORD Version; 2748 DWORD Size; 2749 DWORD NumberOfFaultDomains; 2750 GUID FaultDomainIds[ANYSIZE_ARRAY]; 2751 } STORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR, *PSTORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR; 2752 2753 typedef enum _STORAGE_PROTOCOL_TYPE { 2754 ProtocolTypeUnknown = 0x00, 2755 ProtocolTypeScsi, 2756 ProtocolTypeAta, 2757 ProtocolTypeNvme, 2758 ProtocolTypeSd, 2759 ProtocolTypeUfs, 2760 ProtocolTypeProprietary = 0x7E, 2761 ProtocolTypeMaxReserved = 0x7F 2762 } STORAGE_PROTOCOL_TYPE, *PSTORAGE_PROTOCOL_TYPE; 2763 2764 typedef enum _STORAGE_PROTOCOL_NVME_DATA_TYPE { 2765 NVMeDataTypeUnknown = 0, 2766 NVMeDataTypeIdentify, 2767 NVMeDataTypeLogPage, 2768 NVMeDataTypeFeature 2769 } STORAGE_PROTOCOL_NVME_DATA_TYPE, *PSTORAGE_PROTOCOL_NVME_DATA_TYPE; 2770 2771 typedef enum _STORAGE_PROTOCOL_ATA_DATA_TYPE { 2772 AtaDataTypeUnknown = 0, 2773 AtaDataTypeIdentify, 2774 AtaDataTypeLogPage 2775 } STORAGE_PROTOCOL_ATA_DATA_TYPE, *PSTORAGE_PROTOCOL_ATA_DATA_TYPE; 2776 2777 typedef enum _STORAGE_PROTOCOL_UFS_DATA_TYPE { 2778 UfsDataTypeUnknown = 0, 2779 UfsDataTypeQueryDescriptor, 2780 UfsDataTypeQueryAttribute, 2781 UfsDataTypeQueryFlag, 2782 UfsDataTypeQueryDmeAttribute, 2783 UfsDataTypeQueryDmePeerAttribute, 2784 UfsDataTypeMax 2785 } STORAGE_PROTOCOL_UFS_DATA_TYPE, *PSTORAGE_PROTOCOL_UFS_DATA_TYPE; 2786 2787 typedef union _STORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE { 2788 __C89_NAMELESS struct { 2789 DWORD RetainAsynEvent : 1; 2790 DWORD LogSpecificField : 4; 2791 DWORD Reserved : 27; 2792 }; 2793 DWORD AsUlong; 2794 } STORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE, *PSTORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE; 2795 2796 typedef struct _STORAGE_PROTOCOL_SPECIFIC_DATA { 2797 STORAGE_PROTOCOL_TYPE ProtocolType; 2798 DWORD DataType; 2799 DWORD ProtocolDataRequestValue; 2800 DWORD ProtocolDataRequestSubValue; 2801 DWORD ProtocolDataOffset; 2802 DWORD ProtocolDataLength; 2803 DWORD FixedProtocolReturnData; 2804 DWORD ProtocolDataRequestSubValue2; 2805 DWORD ProtocolDataRequestSubValue3; 2806 DWORD ProtocolDataRequestSubValue4; 2807 } STORAGE_PROTOCOL_SPECIFIC_DATA, *PSTORAGE_PROTOCOL_SPECIFIC_DATA; 2808 2809 typedef struct _STORAGE_PROTOCOL_SPECIFIC_DATA_EXT { 2810 STORAGE_PROTOCOL_TYPE ProtocolType; 2811 DWORD DataType; 2812 DWORD ProtocolDataValue; 2813 DWORD ProtocolDataSubValue; 2814 DWORD ProtocolDataOffset; 2815 DWORD ProtocolDataLength; 2816 DWORD FixedProtocolReturnData; 2817 DWORD ProtocolDataSubValue2; 2818 DWORD ProtocolDataSubValue3; 2819 DWORD ProtocolDataSubValue4; 2820 DWORD ProtocolDataSubValue5; 2821 DWORD Reserved[5]; 2822 } STORAGE_PROTOCOL_SPECIFIC_DATA_EXT, *PSTORAGE_PROTOCOL_SPECIFIC_DATA_EXT; 2823 2824 typedef struct _STORAGE_PROTOCOL_DATA_DESCRIPTOR { 2825 DWORD Version; 2826 DWORD Size; 2827 STORAGE_PROTOCOL_SPECIFIC_DATA ProtocolSpecificData; 2828 } STORAGE_PROTOCOL_DATA_DESCRIPTOR, *PSTORAGE_PROTOCOL_DATA_DESCRIPTOR; 2829 2830 typedef struct _STORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT { 2831 DWORD Version; 2832 DWORD Size; 2833 STORAGE_PROTOCOL_SPECIFIC_DATA_EXT ProtocolSpecificData; 2834 } STORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT, *PSTORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT; 2835 2836 #define STORAGE_TEMPERATURE_VALUE_NOT_REPORTED 0x8000 2837 2838 typedef struct _STORAGE_TEMPERATURE_INFO { 2839 WORD Index; 2840 SHORT Temperature; 2841 SHORT OverThreshold; 2842 SHORT UnderThreshold; 2843 BOOLEAN OverThresholdChangable; 2844 BOOLEAN UnderThresholdChangable; 2845 BOOLEAN EventGenerated; 2846 BYTE Reserved0; 2847 DWORD Reserved1; 2848 } STORAGE_TEMPERATURE_INFO, *PSTORAGE_TEMPERATURE_INFO; 2849 2850 typedef struct _STORAGE_TEMPERATURE_DATA_DESCRIPTOR { 2851 DWORD Version; 2852 DWORD Size; 2853 SHORT CriticalTemperature; 2854 SHORT WarningTemperature; 2855 WORD InfoCount; 2856 BYTE Reserved0[2]; 2857 DWORD Reserved1[2]; 2858 STORAGE_TEMPERATURE_INFO TemperatureInfo[ANYSIZE_ARRAY]; 2859 } STORAGE_TEMPERATURE_DATA_DESCRIPTOR, *PSTORAGE_TEMPERATURE_DATA_DESCRIPTOR; 2860 2861 #define STORAGE_TEMPERATURE_THRESHOLD_FLAG_ADAPTER_REQUEST 0x0001 2862 2863 typedef struct _STORAGE_TEMPERATURE_THRESHOLD { 2864 DWORD Version; 2865 DWORD Size; 2866 WORD Flags; 2867 WORD Index; 2868 SHORT Threshold; 2869 BOOLEAN OverThreshold; 2870 BYTE Reserved; 2871 } STORAGE_TEMPERATURE_THRESHOLD, *PSTORAGE_TEMPERATURE_THRESHOLD; 2872 2873 #define STORAGE_PROTOCOL_STRUCTURE_VERSION 0x1 2874 2875 typedef struct _STORAGE_PROTOCOL_COMMAND { 2876 DWORD Version; 2877 DWORD Length; 2878 STORAGE_PROTOCOL_TYPE ProtocolType; 2879 DWORD Flags; 2880 DWORD ReturnStatus; 2881 DWORD ErrorCode; 2882 DWORD CommandLength; 2883 DWORD ErrorInfoLength; 2884 DWORD DataToDeviceTransferLength; 2885 DWORD DataFromDeviceTransferLength; 2886 DWORD TimeOutValue; 2887 DWORD ErrorInfoOffset; 2888 DWORD DataToDeviceBufferOffset; 2889 DWORD DataFromDeviceBufferOffset; 2890 DWORD CommandSpecific; 2891 DWORD Reserved0; 2892 DWORD FixedProtocolReturnData; 2893 DWORD Reserved1[3]; 2894 BYTE Command[ANYSIZE_ARRAY]; 2895 } STORAGE_PROTOCOL_COMMAND, *PSTORAGE_PROTOCOL_COMMAND; 2896 2897 #define STORAGE_PROTOCOL_COMMAND_FLAG_ADAPTER_REQUEST 0x80000000 2898 2899 #define STORAGE_PROTOCOL_STATUS_PENDING 0x0 2900 #define STORAGE_PROTOCOL_STATUS_SUCCESS 0x1 2901 #define STORAGE_PROTOCOL_STATUS_ERROR 0x2 2902 #define STORAGE_PROTOCOL_STATUS_INVALID_REQUEST 0x3 2903 #define STORAGE_PROTOCOL_STATUS_NO_DEVICE 0x4 2904 #define STORAGE_PROTOCOL_STATUS_BUSY 0x5 2905 #define STORAGE_PROTOCOL_STATUS_DATA_OVERRUN 0x6 2906 #define STORAGE_PROTOCOL_STATUS_INSUFFICIENT_RESOURCES 0x7 2907 #define STORAGE_PROTOCOL_STATUS_THROTTLED_REQUEST 0x8 2908 #define STORAGE_PROTOCOL_STATUS_NOT_SUPPORTED 0xFF 2909 2910 #define STORAGE_PROTOCOL_COMMAND_LENGTH_NVME 0x40 2911 2912 #define STORAGE_PROTOCOL_SPECIFIC_NVME_ADMIN_COMMAND 0x01 2913 #define STORAGE_PROTOCOL_SPECIFIC_NVME_NVM_COMMAND 0x02 2914 2915 #if (_WIN32_WINNT >= 0x0601) 2916 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER { 2917 WORD StructureVersion; 2918 WORD StructureLength; 2919 DWORD RequestedOplockLevel; 2920 DWORD Flags; 2921 } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER; 2922 2923 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER { 2924 WORD StructureVersion; 2925 WORD StructureLength; 2926 DWORD OriginalOplockLevel; 2927 DWORD NewOplockLevel; 2928 DWORD Flags; 2929 ACCESS_MASK AccessMode; 2930 WORD ShareMode; 2931 } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER; 2932 2933 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001) 2934 2935 typedef struct _BOOT_AREA_INFO { 2936 ULONG BootSectorCount; 2937 struct { 2938 LARGE_INTEGER Offset; 2939 } BootSectors[2]; 2940 } BOOT_AREA_INFO, *PBOOT_AREA_INFO; 2941 2942 typedef struct _RETRIEVAL_POINTER_BASE { 2943 LARGE_INTEGER FileAreaOffset; 2944 } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE; 2945 2946 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION { 2947 ULONG VolumeFlags; 2948 ULONG FlagMask; 2949 ULONG Version; 2950 ULONG Reserved; 2951 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION; 2952 2953 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION { 2954 CHAR FileSystem[9]; 2955 } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION; 2956 2957 typedef struct _FILE_SYSTEM_RECOGNITION_STRUCTURE { 2958 UCHAR Jmp[3]; 2959 UCHAR FsName[8]; 2960 UCHAR MustBeZero[5]; 2961 ULONG Identifier; 2962 USHORT Length; 2963 USHORT Checksum; 2964 } FILE_SYSTEM_RECOGNITION_STRUCTURE; 2965 2966 #define OPLOCK_LEVEL_CACHE_READ (0x00000001) 2967 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002) 2968 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004) 2969 2970 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001) 2971 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002) 2972 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004) 2973 2974 #define REQUEST_OPLOCK_CURRENT_VERSION 1 2975 2976 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001) 2977 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002) 2978 2979 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1 2980 2981 typedef struct _SD_CHANGE_MACHINE_SID_INPUT { 2982 USHORT CurrentMachineSIDOffset; 2983 USHORT CurrentMachineSIDLength; 2984 USHORT NewMachineSIDOffset; 2985 USHORT NewMachineSIDLength; 2986 } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT; 2987 2988 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT { 2989 ULONGLONG NumSDChangedSuccess; 2990 ULONGLONG NumSDChangedFail; 2991 ULONGLONG NumSDUnused; 2992 ULONGLONG NumSDTotal; 2993 ULONGLONG NumMftSDChangedSuccess; 2994 ULONGLONG NumMftSDChangedFail; 2995 ULONGLONG NumMftSDTotal; 2996 } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT; 2997 2998 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1 2999 3000 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO { 3001 ULONG ExtendedCode; 3002 ULONG Length; 3003 ULONG Flags; 3004 ULONG Reserved; 3005 } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO; 3006 3007 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT { 3008 DWORD Flags; 3009 DWORD NumberOfClusters; 3010 LARGE_INTEGER Cluster[1]; 3011 } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT; 3012 3013 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT { 3014 DWORD Offset; 3015 DWORD NumberOfMatches; 3016 DWORD BufferSizeRequired; 3017 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT; 3018 3019 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY { 3020 DWORD OffsetToNext; 3021 DWORD Flags; 3022 LARGE_INTEGER Reserved; 3023 LARGE_INTEGER Cluster; 3024 WCHAR FileName[1]; 3025 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY; 3026 3027 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000 3028 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001 3029 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002 3030 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004 3031 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008 3032 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000 3033 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000 3034 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000 3035 3036 typedef struct _FILE_TYPE_NOTIFICATION_INPUT { 3037 ULONG Flags; 3038 ULONG NumFileTypeIDs; 3039 GUID FileTypeID[1]; 3040 } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT; 3041 3042 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001 3043 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002 3044 3045 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,124, METHOD_BUFFERED, FILE_ANY_ACCESS) 3046 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,125, METHOD_BUFFERED, FILE_ANY_ACCESS) 3047 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM,127, METHOD_BUFFERED, FILE_ANY_ACCESS) 3048 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,128, METHOD_BUFFERED, FILE_ANY_ACCESS) 3049 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,129, METHOD_BUFFERED, FILE_ANY_ACCESS) 3050 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,140, METHOD_BUFFERED, FILE_ANY_ACCESS) 3051 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,141, METHOD_BUFFERED, FILE_ANY_ACCESS) 3052 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS) 3053 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS) 3054 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,144,METHOD_BUFFERED,FILE_ANY_ACCESS) 3055 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS) 3056 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS) 3057 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,147, METHOD_BUFFERED, FILE_ANY_ACCESS) 3058 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,148, METHOD_BUFFERED, FILE_ANY_ACCESS) 3059 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS) 3060 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS) 3061 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS) 3062 #define FSCTL_CSV_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED, FILE_ANY_ACCESS) 3063 #define FSCTL_SET_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 195, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3064 #define FSCTL_GET_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 196, METHOD_BUFFERED, FILE_ANY_ACCESS) 3065 #define FSCTL_DELETE_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 197, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3066 #define FSCTL_ENUM_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 198, METHOD_BUFFERED, FILE_ANY_ACCESS) 3067 #define FSCTL_ENUM_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 199, METHOD_NEITHER, FILE_ANY_ACCESS) 3068 #define FSCTL_ADD_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 204, METHOD_BUFFERED, FILE_WRITE_DATA) 3069 #define FSCTL_REMOVE_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 205, METHOD_BUFFERED, FILE_WRITE_DATA) 3070 #define FSCTL_UPDATE_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 206, METHOD_BUFFERED, FILE_WRITE_DATA) 3071 #define FSCTL_GET_WOF_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 218, METHOD_BUFFERED, FILE_ANY_ACCESS) 3072 #define FSCTL_SUSPEND_OVERLAY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 225, METHOD_BUFFERED, FILE_ANY_ACCESS) 3073 3074 typedef struct _CSV_NAMESPACE_INFO { 3075 ULONG Version; 3076 ULONG DeviceNumber; 3077 LARGE_INTEGER StartingOffset; 3078 ULONG SectorSize; 3079 } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO; 3080 3081 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO)) 3082 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF 3083 3084 #endif /*(_WIN32_WINNT >= 0x0601)*/ 3085 3086 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) 3087 #define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA) 3088 #define FSCTL_CORRUPTION_HANDLING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 152, METHOD_BUFFERED, FILE_ANY_ACCESS) 3089 #define FSCTL_OFFLOAD_READ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_READ_ACCESS) 3090 #define FSCTL_OFFLOAD_WRITE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_WRITE_ACCESS) 3091 #define FSCTL_SET_PURGE_FAILURE_MODE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 156, METHOD_BUFFERED, FILE_ANY_ACCESS) 3092 #define FSCTL_QUERY_FILE_LAYOUT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 157, METHOD_NEITHER, FILE_ANY_ACCESS) 3093 #define FSCTL_IS_VOLUME_OWNED_BYCSVFS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 158, METHOD_BUFFERED, FILE_ANY_ACCESS) 3094 #define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS) 3095 #define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) 3096 #define FSCTL_QUERY_FILE_REGIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 161, METHOD_BUFFERED, FILE_ANY_ACCESS) 3097 #define FSCTL_RKF_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_NEITHER, FILE_ANY_ACCESS) 3098 #define FSCTL_SCRUB_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED, FILE_ANY_ACCESS) 3099 #define FSCTL_REPAIR_COPIES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) 3100 #define FSCTL_DISABLE_LOCAL_BUFFERING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 174, METHOD_BUFFERED, FILE_ANY_ACCESS) 3101 #define FSCTL_CSV_MGMT_LOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED, FILE_ANY_ACCESS) 3102 #define FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS) 3103 #define FSCTL_ADVANCE_FILE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED, FILE_ANY_ACCESS) 3104 #define FSCTL_CSV_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 178, METHOD_BUFFERED, FILE_ANY_ACCESS) 3105 #define FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 179, METHOD_BUFFERED, FILE_ANY_ACCESS) 3106 #define FSCTL_WRITE_USN_REASON CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 180, METHOD_BUFFERED, FILE_ANY_ACCESS) 3107 #define FSCTL_CSV_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 181, METHOD_BUFFERED, FILE_ANY_ACCESS) 3108 #define FSCTL_GET_REFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 182, METHOD_BUFFERED, FILE_ANY_ACCESS) 3109 #define FSCTL_CSV_H_BREAKING_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 185, METHOD_BUFFERED, FILE_ANY_ACCESS) 3110 #define FSCTL_SHUFFLE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 208, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 3111 #endif /*_WIN32_WINNT >= _WIN32_WINNT_WIN8 */ 3112 3113 #if (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE) 3114 #define FSCTL_QUERY_STORAGE_CLASSES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 187, METHOD_BUFFERED, FILE_ANY_ACCESS) 3115 #define FSCTL_QUERY_REGION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 188, METHOD_BUFFERED, FILE_ANY_ACCESS) 3116 #define FSCTL_USN_TRACK_MODIFIED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 189, METHOD_BUFFERED, FILE_ANY_ACCESS) 3117 #define FSCTL_QUERY_SHARED_VIRTUAL_DISK_SUPPORT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 192, METHOD_BUFFERED, FILE_ANY_ACCESS) 3118 #define FSCTL_SVHDX_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 193, METHOD_BUFFERED, FILE_ANY_ACCESS) 3119 #define FSCTL_SVHDX_SET_INITIATOR_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 194, METHOD_BUFFERED, FILE_ANY_ACCESS) 3120 #define FSCTL_DUPLICATE_EXTENTS_TO_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 209, METHOD_BUFFERED, FILE_WRITE_DATA) 3121 #define FSCTL_SPARSE_OVERALLOCATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 211, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3122 #define FSCTL_STORAGE_QOS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 212, METHOD_BUFFERED, FILE_ANY_ACCESS) 3123 #define FSCTL_SVHDX_ASYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 217, METHOD_BUFFERED, FILE_ANY_ACCESS) 3124 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE) */ 3125 3126 #if (_WIN32_WINNT >= _WIN32_WINNT_WINTHRESHOLD) 3127 #define FSCTL_INITIATE_FILE_METADATA_OPTIMIZATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 215, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3128 #define FSCTL_QUERY_FILE_METADATA_OPTIMIZATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 216, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3129 #define FSCTL_HCS_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 219, METHOD_BUFFERED, FILE_ANY_ACCESS) 3130 #define FSCTL_HCS_ASYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 220, METHOD_BUFFERED, FILE_ANY_ACCESS) 3131 #define FSCTL_QUERY_EXTENT_READ_CACHE_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 221, METHOD_NEITHER, FILE_ANY_ACCESS) 3132 #define FSCTL_QUERY_REFS_VOLUME_COUNTER_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 222, METHOD_NEITHER, FILE_ANY_ACCESS) 3133 #define FSCTL_CLEAN_VOLUME_METADATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 223, METHOD_BUFFERED, FILE_ANY_ACCESS) 3134 #define FSCTL_SET_INTEGRITY_INFORMATION_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 224, METHOD_BUFFERED, FILE_ANY_ACCESS) 3135 #define FSCTL_VIRTUAL_STORAGE_QUERY_PROPERTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 226, METHOD_BUFFERED, FILE_ANY_ACCESS) 3136 #define FSCTL_FILESYSTEM_GET_STATISTICS_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 227, METHOD_BUFFERED, FILE_ANY_ACCESS) 3137 #define FSCTL_QUERY_VOLUME_CONTAINER_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 228, METHOD_BUFFERED, FILE_ANY_ACCESS) 3138 #define FSCTL_SET_LAYER_ROOT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 229, METHOD_BUFFERED, FILE_ANY_ACCESS) 3139 #define FSCTL_HCS_SYNC_NO_WRITE_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 238, METHOD_BUFFERED, FILE_ANY_ACCESS) 3140 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINTHRESHOLD) */ 3141 3142 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_TH2) 3143 #define FSCTL_QUERY_DIRECT_ACCESS_EXTENTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 230, METHOD_NEITHER, FILE_ANY_ACCESS) 3144 #define FSCTL_NOTIFY_STORAGE_SPACE_ALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 231, METHOD_BUFFERED, FILE_ANY_ACCESS) 3145 #define FSCTL_SSDI_STORAGE_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 232, METHOD_BUFFERED, FILE_ANY_ACCESS) 3146 #define FSCTL_GHOST_FILE_EXTENTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 235, METHOD_BUFFERED, FILE_WRITE_ACCESS) 3147 #define FSCTL_QUERY_GHOSTED_FILE_EXTENTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 236, METHOD_BUFFERED, FILE_ANY_ACCESS) 3148 #define FSCTL_UNMAP_SPACE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 237, METHOD_BUFFERED, FILE_ANY_ACCESS) 3149 #define FSCTL_QUERY_REFS_SMR_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 247, METHOD_BUFFERED, FILE_ANY_ACCESS) 3150 #define FSCTL_SET_REFS_SMR_VOLUME_GC_PARAMETERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 248, METHOD_BUFFERED, FILE_ANY_ACCESS) 3151 #define FSCTL_SET_REFS_FILE_STRICTLY_SEQUENTIAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 249, METHOD_BUFFERED, FILE_ANY_ACCESS) 3152 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN10_TH2) */ 3153 3154 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS1) 3155 #define FSCTL_QUERY_DIRECT_IMAGE_ORIGINAL_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 233, METHOD_BUFFERED, FILE_ANY_ACCESS) 3156 #define FSCTL_READ_UNPRIVILEGED_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 234, METHOD_NEITHER, FILE_ANY_ACCESS) 3157 #define FSCTL_START_VIRTUALIZATION_INSTANCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 240, METHOD_BUFFERED, FILE_ANY_ACCESS) 3158 #define FSCTL_GET_FILTER_FILE_IDENTIFIER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 241, METHOD_BUFFERED, FILE_ANY_ACCESS) 3159 #define FSCTL_START_VIRTUALIZATION_INSTANCE_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 256, METHOD_BUFFERED, FILE_ANY_ACCESS) 3160 #define FSCTL_SET_REPARSE_POINT_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 259, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3161 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS1) */ 3162 3163 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS2) 3164 #define FSCTL_STREAMS_QUERY_PARAMETERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 241, METHOD_BUFFERED, FILE_ANY_ACCESS) 3165 #define FSCTL_STREAMS_ASSOCIATE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 242, METHOD_BUFFERED, FILE_ANY_ACCESS) 3166 #define FSCTL_STREAMS_QUERY_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 243, METHOD_BUFFERED, FILE_ANY_ACCESS) 3167 #define FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 244, METHOD_NEITHER, FILE_ANY_ACCESS) 3168 #define FSCTL_QUERY_VOLUME_NUMA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 245, METHOD_BUFFERED, FILE_ANY_ACCESS) 3169 #define FSCTL_REFS_DEALLOCATE_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 246, METHOD_BUFFERED, FILE_ANY_ACCESS) 3170 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS2) */ 3171 3172 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS3) 3173 #define FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_WRITE_DATA) 3174 #define FSCTL_QUERY_BAD_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 251, METHOD_BUFFERED, FILE_ANY_ACCESS) 3175 #define FSCTL_SET_DAX_ALLOC_ALIGNMENT_HINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 252, METHOD_BUFFERED, FILE_ANY_ACCESS) 3176 #define FSCTL_DELETE_CORRUPTED_REFS_CONTAINER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 253, METHOD_BUFFERED, FILE_ANY_ACCESS) 3177 #define FSCTL_SCRUB_UNDISCOVERABLE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 254, METHOD_BUFFERED, FILE_ANY_ACCESS) 3178 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS3) */ 3179 3180 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS4) 3181 #define FSCTL_NOTIFY_DATA_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 255, METHOD_BUFFERED, FILE_ANY_ACCESS) 3182 #define FSCTL_ENCRYPTION_KEY_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 257, METHOD_BUFFERED, FILE_ANY_ACCESS) 3183 #define FSCTL_VIRTUAL_STORAGE_SET_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 258, METHOD_BUFFERED, FILE_ANY_ACCESS) 3184 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS4) */ 3185 3186 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5) 3187 #define FSCTL_REARRANGE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 264, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 3188 #define FSCTL_VIRTUAL_STORAGE_PASSTHROUGH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 265, METHOD_BUFFERED, FILE_ANY_ACCESS) 3189 #define FSCTL_GET_RETRIEVAL_POINTER_COUNT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 266, METHOD_NEITHER, FILE_ANY_ACCESS) 3190 #if defined(_WIN64) 3191 #define FSCTL_ENABLE_PER_IO_FLAGS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 267, METHOD_BUFFERED, FILE_ANY_ACCESS) 3192 #endif 3193 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5) */ 3194 3195 #if (NTDDI_VERSION >= NTDDI_WIN10_RS5) 3196 #define FSCTL_QUERY_ASYNC_DUPLICATE_EXTENTS_STATUS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 268, METHOD_BUFFERED, FILE_ANY_ACCESS) 3197 #endif 3198 #if (NTDDI_VERSION >= NTDDI_WIN10_MN) 3199 #define FSCTL_SMB_SHARE_FLUSH_AND_PURGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 271, METHOD_BUFFERED, FILE_ANY_ACCESS) 3200 #endif 3201 #if (NTDDI_VERSION >= NTDDI_WIN10_FE) 3202 #define FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 272, METHOD_BUFFERED, FILE_ANY_ACCESS) 3203 #endif 3204 #if (NTDDI_VERSION >= NTDDI_WIN10_CO) 3205 #define FSCTL_MANAGE_BYPASS_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 274, METHOD_BUFFERED, FILE_ANY_ACCESS) 3206 #endif 3207 #if (NTDDI_VERSION >= NTDDI_WIN10_FE) 3208 #define FSCTL_REFS_DEALLOCATE_RANGES_EX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 275, METHOD_BUFFERED, FILE_ANY_ACCESS) 3209 #endif 3210 #if (NTDDI_VERSION >= NTDDI_WIN10_FE) 3211 #define FSCTL_SET_CACHED_RUNS_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 276, METHOD_BUFFERED, FILE_ANY_ACCESS) 3212 #endif 3213 #if (NTDDI_VERSION >= NTDDI_WIN10_NI) 3214 #define FSCTL_REFS_SET_VOLUME_COMPRESSION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 277, METHOD_BUFFERED, FILE_ANY_ACCESS) 3215 #define FSCTL_REFS_QUERY_VOLUME_COMPRESSION_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 278, METHOD_BUFFERED, FILE_ANY_ACCESS) 3216 #endif 3217 #if (NTDDI_VERSION >= NTDDI_WIN10_NI) 3218 #define FSCTL_DUPLICATE_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 279, METHOD_BUFFERED, FILE_ANY_ACCESS) 3219 #define FSCTL_CREATE_LCN_WEAK_REFERENCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 280, METHOD_BUFFERED, FILE_ANY_ACCESS) 3220 #define FSCTL_DELETE_LCN_WEAK_REFERENCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 281, METHOD_BUFFERED, FILE_ANY_ACCESS) 3221 #define FSCTL_QUERY_LCN_WEAK_REFERENCE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 282, METHOD_BUFFERED, FILE_ANY_ACCESS) 3222 #define FSCTL_DELETE_LCN_WEAK_REFERENCES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 283, METHOD_BUFFERED, FILE_ANY_ACCESS) 3223 #endif 3224 #if (NTDDI_VERSION >= NTDDI_WIN10_NI) 3225 #define FSCTL_REFS_SET_VOLUME_DEDUP_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 284, METHOD_BUFFERED, FILE_ANY_ACCESS) 3226 #define FSCTL_REFS_QUERY_VOLUME_DEDUP_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 285, METHOD_BUFFERED, FILE_ANY_ACCESS) 3227 #endif 3228 #if (NTDDI_VERSION >= NTDDI_WIN10_RS5) 3229 #define FSCTL_LMR_QUERY_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 286, METHOD_BUFFERED, FILE_ANY_ACCESS) 3230 #endif 3231 3232 #if (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE) 3233 typedef struct _DUPLICATE_EXTENTS_DATA { 3234 HANDLE FileHandle; 3235 LARGE_INTEGER SourceFileOffset; 3236 LARGE_INTEGER TargetFileOffset; 3237 LARGE_INTEGER ByteCount; 3238 } DUPLICATE_EXTENTS_DATA, *PDUPLICATE_EXTENTS_DATA; 3239 3240 #if ((NTDDI_VERSION >= NTDDI_WIN10_RS2) && defined(_WIN64)) 3241 typedef struct _DUPLICATE_EXTENTS_DATA32 { 3242 UINT32 FileHandle; 3243 LARGE_INTEGER SourceFileOffset; 3244 LARGE_INTEGER TargetFileOffset; 3245 LARGE_INTEGER ByteCount; 3246 } DUPLICATE_EXTENTS_DATA32, *PDUPLICATE_EXTENTS_DATA32; 3247 #endif /* ((NTDDI_VERSION >= NTDDI_WIN10_RS2) && defined(_WIN64)) */ 3248 3249 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE) */ 3250 3251 #if (NTDDI_VERSION >= NTDDI_WIN10_RS3) 3252 #define DUPLICATE_EXTENTS_DATA_EX_SOURCE_ATOMIC 0x00000001 3253 3254 #if (NTDDI_VERSION >= NTDDI_WIN10_VB) 3255 #define DUPLICATE_EXTENTS_DATA_EX_ASYNC 0x00000002 3256 #endif /* (NTDDI_VERSION >= NTDDI_WIN10_VB) */ 3257 3258 typedef struct _DUPLICATE_EXTENTS_DATA_EX { 3259 SIZE_T Size; 3260 HANDLE FileHandle; 3261 LARGE_INTEGER SourceFileOffset; 3262 LARGE_INTEGER TargetFileOffset; 3263 LARGE_INTEGER ByteCount; 3264 DWORD Flags; 3265 } DUPLICATE_EXTENTS_DATA_EX, *PDUPLICATE_EXTENTS_DATA_EX; 3266 3267 #if ((NTDDI_VERSION >= NTDDI_WIN10_RS3) && defined(_WIN64)) 3268 typedef struct _DUPLICATE_EXTENTS_DATA_EX32 { 3269 DWORD32 Size; 3270 DWORD32 FileHandle; 3271 LARGE_INTEGER SourceFileOffset; 3272 LARGE_INTEGER TargetFileOffset; 3273 LARGE_INTEGER ByteCount; 3274 DWORD Flags; 3275 } DUPLICATE_EXTENTS_DATA_EX32, *PDUPLICATE_EXTENTS_DATA_EX32; 3276 #endif /* ((NTDDI_VERSION >= NTDDI_WIN10_RS3) && defined(_WIN64)) */ 3277 3278 #endif /* (NTDDI_VERSION >= NTDDI_WIN10_RS3) */ 3279 3280 #endif /* _FILESYSTEMFSCTL_ */ 3281 3282 3283 #define IOCTL_VOLUME_BASE ((DWORD) 'V') 3284 3285 #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS CTL_CODE(IOCTL_VOLUME_BASE,0,METHOD_BUFFERED,FILE_ANY_ACCESS) 3286 #define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,1,METHOD_BUFFERED,FILE_ANY_ACCESS) 3287 #define IOCTL_VOLUME_ONLINE CTL_CODE(IOCTL_VOLUME_BASE,2,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 3288 #define IOCTL_VOLUME_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 3289 #define IOCTL_VOLUME_IS_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,4,METHOD_BUFFERED, FILE_ANY_ACCESS) 3290 #define IOCTL_VOLUME_IS_IO_CAPABLE CTL_CODE(IOCTL_VOLUME_BASE,5,METHOD_BUFFERED,FILE_ANY_ACCESS) 3291 #define IOCTL_VOLUME_QUERY_FAILOVER_SET CTL_CODE(IOCTL_VOLUME_BASE,6,METHOD_BUFFERED,FILE_ANY_ACCESS) 3292 #define IOCTL_VOLUME_QUERY_VOLUME_NUMBER CTL_CODE(IOCTL_VOLUME_BASE,7,METHOD_BUFFERED,FILE_ANY_ACCESS) 3293 #define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL CTL_CODE(IOCTL_VOLUME_BASE,8,METHOD_BUFFERED,FILE_ANY_ACCESS) 3294 #define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL CTL_CODE(IOCTL_VOLUME_BASE,9,METHOD_BUFFERED,FILE_ANY_ACCESS) 3295 #define IOCTL_VOLUME_IS_CLUSTERED CTL_CODE(IOCTL_VOLUME_BASE,12,METHOD_BUFFERED,FILE_ANY_ACCESS) 3296 #define IOCTL_VOLUME_GET_GPT_ATTRIBUTES CTL_CODE(IOCTL_VOLUME_BASE,14,METHOD_BUFFERED,FILE_ANY_ACCESS) 3297 3298 typedef struct _DISK_EXTENT { 3299 DWORD DiskNumber; 3300 LARGE_INTEGER StartingOffset; 3301 LARGE_INTEGER ExtentLength; 3302 } DISK_EXTENT,*PDISK_EXTENT; 3303 3304 typedef struct _VOLUME_DISK_EXTENTS { 3305 DWORD NumberOfDiskExtents; 3306 DISK_EXTENT Extents[1]; 3307 } VOLUME_DISK_EXTENTS,*PVOLUME_DISK_EXTENTS; 3308 3309 #if (_WIN32_WINNT >= 0x0603) 3310 3311 #define WOF_CURRENT_VERSION 1 3312 3313 typedef struct _WOF_EXTERNAL_INFO { 3314 DWORD Version; 3315 DWORD Provider; 3316 } WOF_EXTERNAL_INFO, *PWOF_EXTERNAL_INFO; 3317 3318 #endif /*(_WIN32_WINNT >= 0x0603)*/ 3319 3320 #if (_WIN32_WINNT >= 0x0A00) 3321 3322 #define WOF_PROVIDER_FILE 2 3323 3324 #define FILE_PROVIDER_CURRENT_VERSION 1 3325 3326 #define FILE_PROVIDER_COMPRESSION_XPRESS4K 0 3327 #define FILE_PROVIDER_COMPRESSION_LZX 1 3328 #define FILE_PROVIDER_COMPRESSION_XPRESS8K 2 3329 #define FILE_PROVIDER_COMPRESSION_XPRESS16K 3 3330 3331 typedef struct _FILE_PROVIDER_EXTERNAL_INFO_V0 { 3332 DWORD Version; 3333 DWORD Algorithm; 3334 } FILE_PROVIDER_EXTERNAL_INFO_V0, *PFILE_PROVIDER_EXTERNAL_INFO_V0; 3335 3336 typedef struct _FILE_PROVIDER_EXTERNAL_INFO_V1 { 3337 DWORD Version; 3338 DWORD Algorithm; 3339 DWORD Flags; 3340 } FILE_PROVIDER_EXTERNAL_INFO_V1, *PFILE_PROVIDER_EXTERNAL_INFO_V1; 3341 3342 #endif /*(_WIN32_WINNT >= 0x0A00)*/ 3343 3344 #endif /* _WINIOCTL_ */ 3345