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_COMPORT,0x86e0d1e0,0x8089,0x11d0,0x9c,0xe4,0x08,0x00,0x3e,0x30,0x1f,0x73); 23 DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,0x4D36E978,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18); 24 25 #define DiskClassGuid GUID_DEVINTERFACE_DISK 26 #define CdRomClassGuid GUID_DEVINTERFACE_CDROM 27 #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION 28 #define TapeClassGuid GUID_DEVINTERFACE_TAPE 29 #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK 30 #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME 31 #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER 32 #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY 33 #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER 34 #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT 35 #define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT 36 #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR 37 #endif /* DEFINE_GUID */ 38 39 #ifndef _WINIOCTL_ 40 #define _WINIOCTL_ 41 42 #ifndef _DEVIOCTL_ 43 #define _DEVIOCTL_ 44 45 #ifndef DEVICE_TYPE 46 #define DEVICE_TYPE DWORD 47 #endif 48 49 #define FILE_DEVICE_BEEP 0x00000001 50 #define FILE_DEVICE_CD_ROM 0x00000002 51 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 52 #define FILE_DEVICE_CONTROLLER 0x00000004 53 #define FILE_DEVICE_DATALINK 0x00000005 54 #define FILE_DEVICE_DFS 0x00000006 55 #define FILE_DEVICE_DISK 0x00000007 56 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 57 #define FILE_DEVICE_FILE_SYSTEM 0x00000009 58 #define FILE_DEVICE_INPORT_PORT 0x0000000a 59 #define FILE_DEVICE_KEYBOARD 0x0000000b 60 #define FILE_DEVICE_MAILSLOT 0x0000000c 61 #define FILE_DEVICE_MIDI_IN 0x0000000d 62 #define FILE_DEVICE_MIDI_OUT 0x0000000e 63 #define FILE_DEVICE_MOUSE 0x0000000f 64 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 65 #define FILE_DEVICE_NAMED_PIPE 0x00000011 66 #define FILE_DEVICE_NETWORK 0x00000012 67 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 68 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 69 #define FILE_DEVICE_NULL 0x00000015 70 #define FILE_DEVICE_PARALLEL_PORT 0x00000016 71 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 72 #define FILE_DEVICE_PRINTER 0x00000018 73 #define FILE_DEVICE_SCANNER 0x00000019 74 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a 75 #define FILE_DEVICE_SERIAL_PORT 0x0000001b 76 #define FILE_DEVICE_SCREEN 0x0000001c 77 #define FILE_DEVICE_SOUND 0x0000001d 78 #define FILE_DEVICE_STREAMS 0x0000001e 79 #define FILE_DEVICE_TAPE 0x0000001f 80 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 81 #define FILE_DEVICE_TRANSPORT 0x00000021 82 #define FILE_DEVICE_UNKNOWN 0x00000022 83 #define FILE_DEVICE_VIDEO 0x00000023 84 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 85 #define FILE_DEVICE_WAVE_IN 0x00000025 86 #define FILE_DEVICE_WAVE_OUT 0x00000026 87 #define FILE_DEVICE_8042_PORT 0x00000027 88 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 89 #define FILE_DEVICE_BATTERY 0x00000029 90 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a 91 #define FILE_DEVICE_MODEM 0x0000002b 92 #define FILE_DEVICE_VDM 0x0000002c 93 #define FILE_DEVICE_MASS_STORAGE 0x0000002d 94 #define FILE_DEVICE_SMB 0x0000002e 95 #define FILE_DEVICE_KS 0x0000002f 96 #define FILE_DEVICE_CHANGER 0x00000030 97 #define FILE_DEVICE_SMARTCARD 0x00000031 98 #define FILE_DEVICE_ACPI 0x00000032 99 #define FILE_DEVICE_DVD 0x00000033 100 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 101 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 102 #define FILE_DEVICE_DFS_VOLUME 0x00000036 103 #define FILE_DEVICE_SERENUM 0x00000037 104 #define FILE_DEVICE_TERMSRV 0x00000038 105 #define FILE_DEVICE_KSEC 0x00000039 106 #define FILE_DEVICE_FIPS 0x0000003A 107 #define FILE_DEVICE_INFINIBAND 0x0000003B 108 109 #define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 110 111 #define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((DWORD)(ctrlCode & 0xffff0000)) >> 16) 112 113 #define METHOD_BUFFERED 0 114 #define METHOD_IN_DIRECT 1 115 #define METHOD_OUT_DIRECT 2 116 #define METHOD_NEITHER 3 117 118 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT 119 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT 120 121 #define FILE_ANY_ACCESS 0 122 #define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS) 123 #define FILE_READ_ACCESS (0x0001) 124 #define FILE_WRITE_ACCESS (0x0002) 125 126 #endif /* _DEVIOCTL_ */ 127 128 129 #ifndef _NTDDSTOR_H_ 130 #define _NTDDSTOR_H_ 131 132 #ifdef __cplusplus 133 extern "C" { 134 #endif 135 136 #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE 137 138 #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS) 139 #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_ANY_ACCESS) 140 #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS) 141 #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS) 142 #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS) 143 #define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_ANY_ACCESS) 144 #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS) 145 #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS) 146 #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS) 147 148 #define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0250,METHOD_BUFFERED,FILE_ANY_ACCESS) 149 #define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0251,METHOD_BUFFERED,FILE_ANY_ACCESS) 150 151 #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS) 152 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE,0x0301,METHOD_BUFFERED,FILE_ANY_ACCESS) 153 #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0304,METHOD_BUFFERED,FILE_ANY_ACCESS) 154 #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0305,METHOD_BUFFERED,FILE_ANY_ACCESS) 155 #define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0306,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 156 157 #define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS) 158 #define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS) 159 #define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE,0x0405,METHOD_BUFFERED,FILE_READ_ACCESS) 160 161 #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0420,METHOD_BUFFERED,FILE_ANY_ACCESS) 162 #define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE,0x0440,METHOD_BUFFERED,FILE_ANY_ACCESS) 163 #define IOCTL_STORAGE_READ_CAPACITY CTL_CODE(IOCTL_STORAGE_BASE,0x0450,METHOD_BUFFERED,FILE_READ_ACCESS) 164 165 #define OBSOLETE_IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 166 #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 167 168 #if (_WIN32_WINNT >= 0x0601) 169 #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS) 170 #define DeviceDsmActionFlag_NonDestructive 0x80000000 171 #define DeviceDsmAction_None 0 172 #define DeviceDsmAction_Trim 1 173 #define DeviceDsmAction_Notification (2 | DeviceDsmActionFlag_NonDestructive) 174 175 #define IsDsmActionNonDestructive(x) ((BOOLEAN)(!!((x) & DeviceDsmActionFlag_NonDestructive))) 176 177 #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE __MSABI_LONG(0x00000001) 178 179 typedef DWORD DEVICE_DATA_MANAGEMENT_SET_ACTION; 180 typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES { 181 DWORD Size; 182 DEVICE_DATA_MANAGEMENT_SET_ACTION Action; 183 DWORD Flags; 184 DWORD ParameterBlockOffset; 185 DWORD ParameterBlockLength; 186 DWORD DataSetRangesOffset; 187 DWORD DataSetRangesLength; 188 } DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES; 189 190 typedef struct _DEVICE_DATA_SET_RANGE { 191 LONGLONG StartingOffset; 192 DWORDLONG LengthInBytes; 193 } DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE; 194 195 #endif /*(_WIN32_WINNT >= 0x0601)*/ 196 197 typedef struct _STORAGE_HOTPLUG_INFO { 198 DWORD Size; 199 BOOLEAN MediaRemovable; 200 BOOLEAN MediaHotplug; 201 BOOLEAN DeviceHotplug; 202 BOOLEAN WriteCacheEnableOverride; 203 } STORAGE_HOTPLUG_INFO,*PSTORAGE_HOTPLUG_INFO; 204 205 typedef struct _STORAGE_DEVICE_NUMBER { 206 DEVICE_TYPE DeviceType; 207 DWORD DeviceNumber; 208 DWORD PartitionNumber; 209 } STORAGE_DEVICE_NUMBER,*PSTORAGE_DEVICE_NUMBER; 210 211 typedef struct _STORAGE_BUS_RESET_REQUEST { 212 BYTE PathId; 213 } STORAGE_BUS_RESET_REQUEST,*PSTORAGE_BUS_RESET_REQUEST; 214 215 typedef struct STORAGE_BREAK_RESERVATION_REQUEST { 216 DWORD Length; 217 BYTE _unused; 218 BYTE PathId; 219 BYTE TargetId; 220 BYTE Lun; 221 } STORAGE_BREAK_RESERVATION_REQUEST,*PSTORAGE_BREAK_RESERVATION_REQUEST; 222 223 typedef struct _PREVENT_MEDIA_REMOVAL { 224 BOOLEAN PreventMediaRemoval; 225 } PREVENT_MEDIA_REMOVAL,*PPREVENT_MEDIA_REMOVAL; 226 227 typedef struct _CLASS_MEDIA_CHANGE_CONTEXT { 228 DWORD MediaChangeCount; 229 DWORD NewState; 230 } CLASS_MEDIA_CHANGE_CONTEXT,*PCLASS_MEDIA_CHANGE_CONTEXT; 231 232 typedef struct _TAPE_STATISTICS { 233 DWORD Version; 234 DWORD Flags; 235 LARGE_INTEGER RecoveredWrites; 236 LARGE_INTEGER UnrecoveredWrites; 237 LARGE_INTEGER RecoveredReads; 238 LARGE_INTEGER UnrecoveredReads; 239 BYTE CompressionRatioReads; 240 BYTE CompressionRatioWrites; 241 } TAPE_STATISTICS,*PTAPE_STATISTICS; 242 243 #define RECOVERED_WRITES_VALID 0x00000001 244 #define UNRECOVERED_WRITES_VALID 0x00000002 245 #define RECOVERED_READS_VALID 0x00000004 246 #define UNRECOVERED_READS_VALID 0x00000008 247 #define WRITE_COMPRESSION_INFO_VALID 0x00000010 248 #define READ_COMPRESSION_INFO_VALID 0x00000020 249 250 typedef struct _TAPE_GET_STATISTICS { 251 DWORD Operation; 252 } TAPE_GET_STATISTICS,*PTAPE_GET_STATISTICS; 253 254 #define TAPE_RETURN_STATISTICS __MSABI_LONG(0) 255 #define TAPE_RETURN_ENV_INFO __MSABI_LONG(1) 256 #define TAPE_RESET_STATISTICS __MSABI_LONG(2) 257 258 typedef enum _STORAGE_MEDIA_TYPE { 259 DDS_4mm = 0x20, 260 MiniQic, 261 Travan, 262 QIC, 263 MP_8mm, 264 AME_8mm, 265 AIT1_8mm, 266 DLT, 267 NCTP, 268 IBM_3480, 269 IBM_3490E, 270 IBM_Magstar_3590, 271 IBM_Magstar_MP, 272 STK_DATA_D3, 273 SONY_DTF, 274 DV_6mm, 275 DMI, 276 SONY_D2, 277 CLEANER_CARTRIDGE, 278 CD_ROM, 279 CD_R, 280 CD_RW, 281 DVD_ROM, 282 DVD_R, 283 DVD_RW, 284 MO_3_RW, 285 MO_5_WO, 286 MO_5_RW, 287 MO_5_LIMDOW, 288 PC_5_WO, 289 PC_5_RW, 290 PD_5_RW, 291 ABL_5_WO, 292 PINNACLE_APEX_5_RW, 293 SONY_12_WO, 294 PHILIPS_12_WO, 295 HITACHI_12_WO, 296 CYGNET_12_WO, 297 KODAK_14_WO, 298 MO_NFR_525, 299 NIKON_12_RW, 300 IOMEGA_ZIP, 301 IOMEGA_JAZ, 302 SYQUEST_EZ135, 303 SYQUEST_EZFLYER, 304 SYQUEST_SYJET, 305 AVATAR_F2, 306 MP2_8mm, 307 DST_S, 308 DST_M, 309 DST_L, 310 VXATape_1, 311 VXATape_2, 312 STK_9840, 313 LTO_Ultrium, 314 LTO_Accelis, 315 DVD_RAM, 316 AIT_8mm, 317 ADR_1, 318 ADR_2, 319 STK_9940, 320 SAIT, 321 VXATape 322 } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE; 323 324 #define MEDIA_ERASEABLE 0x00000001 325 #define MEDIA_WRITE_ONCE 0x00000002 326 #define MEDIA_READ_ONLY 0x00000004 327 #define MEDIA_READ_WRITE 0x00000008 328 329 #define MEDIA_WRITE_PROTECTED 0x00000100 330 #define MEDIA_CURRENTLY_MOUNTED 0x80000000 331 332 typedef enum _STORAGE_BUS_TYPE { 333 BusTypeUnknown = 0x00, 334 BusTypeScsi = 0x1, 335 BusTypeAtapi = 0x2, 336 BusTypeAta = 0x3, 337 BusType1394 = 0x4, 338 BusTypeSsa = 0x5, 339 BusTypeFibre = 0x6, 340 BusTypeUsb = 0x7, 341 BusTypeRAID = 0x8, 342 #if (_WIN32_WINNT >= 0x0600) 343 BusTypeiScsi = 0x9, 344 BusTypeSas = 0xA, 345 BusTypeSata = 0xB, 346 BusTypeSd = 0xC, 347 BusTypeMmc = 0xD, 348 #endif /*(_WIN32_WINNT >= 0x0600)*/ 349 #if (_WIN32_WINNT >= 0x0601) 350 BusTypeVirtual = 0xE, 351 BusTypeFileBackedVirtual = 0xF, 352 #endif /*(_WIN32_WINNT >= 0x0601)*/ 353 BusTypeMax, 354 BusTypeMaxReserved = 0x7F 355 } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; 356 357 typedef struct _DEVICE_MEDIA_INFO { 358 union { 359 struct { 360 LARGE_INTEGER Cylinders; 361 STORAGE_MEDIA_TYPE MediaType; 362 DWORD TracksPerCylinder; 363 DWORD SectorsPerTrack; 364 DWORD BytesPerSector; 365 DWORD NumberMediaSides; 366 DWORD MediaCharacteristics; 367 } DiskInfo; 368 struct { 369 LARGE_INTEGER Cylinders; 370 STORAGE_MEDIA_TYPE MediaType; 371 DWORD TracksPerCylinder; 372 DWORD SectorsPerTrack; 373 DWORD BytesPerSector; 374 DWORD NumberMediaSides; 375 DWORD MediaCharacteristics; 376 } RemovableDiskInfo; 377 struct { 378 STORAGE_MEDIA_TYPE MediaType; 379 DWORD MediaCharacteristics; 380 DWORD CurrentBlockSize; 381 STORAGE_BUS_TYPE BusType; 382 union { 383 struct { 384 BYTE MediumType; 385 BYTE DensityCode; 386 } ScsiInformation; 387 } BusSpecificData; 388 } TapeInfo; 389 } DeviceSpecific; 390 } DEVICE_MEDIA_INFO,*PDEVICE_MEDIA_INFO; 391 392 typedef struct _GET_MEDIA_TYPES { 393 DWORD DeviceType; 394 DWORD MediaInfoCount; 395 DEVICE_MEDIA_INFO MediaInfo[1]; 396 } GET_MEDIA_TYPES,*PGET_MEDIA_TYPES; 397 398 typedef struct _STORAGE_PREDICT_FAILURE { 399 DWORD PredictFailure; 400 BYTE VendorSpecific[512]; 401 } STORAGE_PREDICT_FAILURE,*PSTORAGE_PREDICT_FAILURE; 402 403 #ifdef __cplusplus 404 } 405 #endif 406 #endif /* _NTDDSTOR_H_ */ 407 408 409 #ifndef _NTDDDISK_H_ 410 #define _NTDDDISK_H_ 411 412 #define IOCTL_DISK_BASE FILE_DEVICE_DISK 413 #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE,0x0000,METHOD_BUFFERED,FILE_ANY_ACCESS) 414 #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS) 415 #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 416 #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0003,METHOD_BUFFERED,FILE_READ_ACCESS) 417 #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 418 #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0005,METHOD_BUFFERED,FILE_ANY_ACCESS) 419 #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 420 #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 421 #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE,0x0008,METHOD_BUFFERED,FILE_ANY_ACCESS) 422 #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE,0x0009,METHOD_BUFFERED,FILE_ANY_ACCESS) 423 #define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE,0x000a,METHOD_BUFFERED,FILE_ANY_ACCESS) 424 #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE,0x000b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 425 #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000c,METHOD_BUFFERED,FILE_ANY_ACCESS) 426 #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE,0x000d,METHOD_BUFFERED,FILE_ANY_ACCESS) 427 #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE,0x000e,METHOD_BUFFERED,FILE_ANY_ACCESS) 428 #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000f,METHOD_BUFFERED,FILE_ANY_ACCESS) 429 #define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE,0x0010,METHOD_BUFFERED,FILE_ANY_ACCESS) 430 #define IOCTL_DISK_PERFORMANCE_OFF CTL_CODE(IOCTL_DISK_BASE,0x0018,METHOD_BUFFERED,FILE_ANY_ACCESS) 431 #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE,0x0011,METHOD_BUFFERED,FILE_ANY_ACCESS) 432 433 #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE,0x0020,METHOD_BUFFERED,FILE_READ_ACCESS) 434 #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE,0x0021,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 435 #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE,0x0022,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 436 437 #define IOCTL_DISK_GET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0012,METHOD_BUFFERED,FILE_ANY_ACCESS) 438 #define IOCTL_DISK_SET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0013,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 439 #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0014,METHOD_BUFFERED,FILE_ANY_ACCESS) 440 #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0015,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 441 #define IOCTL_DISK_CREATE_DISK CTL_CODE(IOCTL_DISK_BASE,0x0016,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 442 #define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(IOCTL_DISK_BASE,0x0017,METHOD_BUFFERED,FILE_READ_ACCESS) 443 #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE,0x0028,METHOD_BUFFERED,FILE_ANY_ACCESS) 444 445 #define IOCTL_DISK_REASSIGN_BLOCKS_EX CTL_CODE(IOCTL_DISK_BASE,0x0029,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 446 #define IOCTL_DISK_UPDATE_DRIVE_SIZE CTL_CODE(IOCTL_DISK_BASE,0x0032,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 447 #define IOCTL_DISK_GROW_PARTITION CTL_CODE(IOCTL_DISK_BASE,0x0034,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 448 #define IOCTL_DISK_GET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0035,METHOD_BUFFERED,FILE_READ_ACCESS) 449 #define IOCTL_DISK_SET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0036,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 450 #define OBSOLETE_DISK_GET_WRITE_CACHE_STATE CTL_CODE(IOCTL_DISK_BASE,0x0037,METHOD_BUFFERED,FILE_READ_ACCESS) 451 #define IOCTL_DISK_DELETE_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0040,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 452 #define IOCTL_DISK_UPDATE_PROPERTIES CTL_CODE(IOCTL_DISK_BASE,0x0050,METHOD_BUFFERED,FILE_ANY_ACCESS) 453 #define IOCTL_DISK_RESET_SNAPSHOT_INFO CTL_CODE(IOCTL_DISK_BASE,0x0084,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 454 #define IOCTL_DISK_FORMAT_DRIVE CTL_CODE(IOCTL_DISK_BASE,0x00f3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 455 #define IOCTL_DISK_SENSE_DEVICE CTL_CODE(IOCTL_DISK_BASE,0x00f8,METHOD_BUFFERED,FILE_ANY_ACCESS) 456 #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS) 457 #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS) 458 #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS) 459 #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS) 460 #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS) 461 #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS) 462 #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS) 463 #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS) 464 #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) 465 466 #define PARTITION_ENTRY_UNUSED 0x00 467 #define PARTITION_FAT_12 0x01 468 #define PARTITION_XENIX_1 0x02 469 #define PARTITION_XENIX_2 0x03 470 #define PARTITION_FAT_16 0x04 471 #define PARTITION_EXTENDED 0x05 472 #define PARTITION_HUGE 0x06 473 #define PARTITION_IFS 0x07 474 #define PARTITION_OS2BOOTMGR 0x0A 475 #define PARTITION_FAT32 0x0B 476 #define PARTITION_FAT32_XINT13 0x0C 477 #define PARTITION_XINT13 0x0E 478 #define PARTITION_XINT13_EXTENDED 0x0F 479 #define PARTITION_PREP 0x41 480 #define PARTITION_LDM 0x42 481 #define PARTITION_UNIX 0x63 482 483 #define VALID_NTFT 0xC0 484 485 #define PARTITION_NTFT 0x80 486 487 #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)) 488 #define IsContainerPartition(PartitionType) ((PartitionType==PARTITION_EXTENDED) || (PartitionType==PARTITION_XINT13_EXTENDED)) 489 #define IsFTPartition(PartitionType) (((PartitionType)&PARTITION_NTFT) && IsRecognizedPartition(PartitionType)) 490 491 typedef enum _MEDIA_TYPE { 492 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, 493 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, 494 F3_230Mb_512,F8_256_128,F3_200Mb_512,F3_240M_512,F3_32M_512 495 } MEDIA_TYPE,*PMEDIA_TYPE; 496 497 typedef struct _FORMAT_PARAMETERS { 498 MEDIA_TYPE MediaType; 499 DWORD StartCylinderNumber; 500 DWORD EndCylinderNumber; 501 DWORD StartHeadNumber; 502 DWORD EndHeadNumber; 503 } FORMAT_PARAMETERS,*PFORMAT_PARAMETERS; 504 505 typedef WORD BAD_TRACK_NUMBER; 506 typedef WORD *PBAD_TRACK_NUMBER; 507 508 typedef struct _FORMAT_EX_PARAMETERS { 509 MEDIA_TYPE MediaType; 510 DWORD StartCylinderNumber; 511 DWORD EndCylinderNumber; 512 DWORD StartHeadNumber; 513 DWORD EndHeadNumber; 514 WORD FormatGapLength; 515 WORD SectorsPerTrack; 516 WORD SectorNumber[1]; 517 } FORMAT_EX_PARAMETERS,*PFORMAT_EX_PARAMETERS; 518 519 typedef struct _DISK_GEOMETRY { 520 LARGE_INTEGER Cylinders; 521 MEDIA_TYPE MediaType; 522 DWORD TracksPerCylinder; 523 DWORD SectorsPerTrack; 524 DWORD BytesPerSector; 525 } DISK_GEOMETRY,*PDISK_GEOMETRY; 526 527 #define WMI_DISK_GEOMETRY_GUID { 0x25007f51,0x57c2,0x11d1,{ 0xa5,0x28,0x0,0xa0,0xc9,0x6,0x29,0x10 } } 528 529 typedef struct _PARTITION_INFORMATION { 530 LARGE_INTEGER StartingOffset; 531 LARGE_INTEGER PartitionLength; 532 DWORD HiddenSectors; 533 DWORD PartitionNumber; 534 BYTE PartitionType; 535 BOOLEAN BootIndicator; 536 BOOLEAN RecognizedPartition; 537 BOOLEAN RewritePartition; 538 } PARTITION_INFORMATION,*PPARTITION_INFORMATION; 539 540 typedef struct _SET_PARTITION_INFORMATION { 541 BYTE PartitionType; 542 } SET_PARTITION_INFORMATION,*PSET_PARTITION_INFORMATION; 543 544 typedef struct _DRIVE_LAYOUT_INFORMATION { 545 DWORD PartitionCount; 546 DWORD Signature; 547 PARTITION_INFORMATION PartitionEntry[1]; 548 } DRIVE_LAYOUT_INFORMATION,*PDRIVE_LAYOUT_INFORMATION; 549 550 typedef struct _VERIFY_INFORMATION { 551 LARGE_INTEGER StartingOffset; 552 DWORD Length; 553 } VERIFY_INFORMATION,*PVERIFY_INFORMATION; 554 555 typedef struct _REASSIGN_BLOCKS { 556 WORD Reserved; 557 WORD Count; 558 DWORD BlockNumber[1]; 559 } REASSIGN_BLOCKS,*PREASSIGN_BLOCKS; 560 561 #include <pshpack1.h> 562 typedef struct _REASSIGN_BLOCKS_EX { 563 WORD Reserved; 564 WORD Count; 565 LARGE_INTEGER BlockNumber[1]; 566 } REASSIGN_BLOCKS_EX,*PREASSIGN_BLOCKS_EX; 567 #include <poppack.h> 568 569 typedef enum _PARTITION_STYLE { 570 PARTITION_STYLE_MBR,PARTITION_STYLE_GPT,PARTITION_STYLE_RAW 571 } PARTITION_STYLE; 572 573 typedef struct _PARTITION_INFORMATION_GPT { 574 GUID PartitionType; 575 GUID PartitionId; 576 DWORD64 Attributes; 577 WCHAR Name [36]; 578 } PARTITION_INFORMATION_GPT,*PPARTITION_INFORMATION_GPT; 579 580 #define GPT_ATTRIBUTE_PLATFORM_REQUIRED (0x0000000000000001) 581 582 #define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x8000000000000000) 583 #define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN (0x4000000000000000) 584 #define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY (0x2000000000000000) 585 #define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY (0x1000000000000000) 586 587 typedef struct _PARTITION_INFORMATION_MBR { 588 BYTE PartitionType; 589 BOOLEAN BootIndicator; 590 BOOLEAN RecognizedPartition; 591 DWORD HiddenSectors; 592 } PARTITION_INFORMATION_MBR,*PPARTITION_INFORMATION_MBR; 593 594 typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR; 595 typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT; 596 597 typedef struct _SET_PARTITION_INFORMATION_EX { 598 PARTITION_STYLE PartitionStyle; 599 __C89_NAMELESS union { 600 SET_PARTITION_INFORMATION_MBR Mbr; 601 SET_PARTITION_INFORMATION_GPT Gpt; 602 } DUMMYUNIONNAME; 603 } SET_PARTITION_INFORMATION_EX,*PSET_PARTITION_INFORMATION_EX; 604 605 typedef struct _CREATE_DISK_GPT { 606 GUID DiskId; 607 DWORD MaxPartitionCount; 608 } CREATE_DISK_GPT,*PCREATE_DISK_GPT; 609 610 typedef struct _CREATE_DISK_MBR { 611 DWORD Signature; 612 } CREATE_DISK_MBR,*PCREATE_DISK_MBR; 613 614 typedef struct _CREATE_DISK { 615 PARTITION_STYLE PartitionStyle; 616 __C89_NAMELESS union { 617 CREATE_DISK_MBR Mbr; 618 CREATE_DISK_GPT Gpt; 619 } DUMMYUNIONNAME; 620 } CREATE_DISK,*PCREATE_DISK; 621 622 typedef struct _GET_LENGTH_INFORMATION { 623 LARGE_INTEGER Length; 624 } GET_LENGTH_INFORMATION,*PGET_LENGTH_INFORMATION; 625 626 typedef struct _PARTITION_INFORMATION_EX { 627 PARTITION_STYLE PartitionStyle; 628 LARGE_INTEGER StartingOffset; 629 LARGE_INTEGER PartitionLength; 630 DWORD PartitionNumber; 631 BOOLEAN RewritePartition; 632 __C89_NAMELESS union { 633 PARTITION_INFORMATION_MBR Mbr; 634 PARTITION_INFORMATION_GPT Gpt; 635 } DUMMYUNIONNAME; 636 } PARTITION_INFORMATION_EX,*PPARTITION_INFORMATION_EX; 637 638 typedef struct _DRIVE_LAYOUT_INFORMATION_GPT { 639 GUID DiskId; 640 LARGE_INTEGER StartingUsableOffset; 641 LARGE_INTEGER UsableLength; 642 DWORD MaxPartitionCount; 643 } DRIVE_LAYOUT_INFORMATION_GPT,*PDRIVE_LAYOUT_INFORMATION_GPT; 644 645 typedef struct _DRIVE_LAYOUT_INFORMATION_MBR { 646 DWORD Signature; 647 } DRIVE_LAYOUT_INFORMATION_MBR,*PDRIVE_LAYOUT_INFORMATION_MBR; 648 649 typedef struct _DRIVE_LAYOUT_INFORMATION_EX { 650 DWORD PartitionStyle; 651 DWORD PartitionCount; 652 __C89_NAMELESS union { 653 DRIVE_LAYOUT_INFORMATION_MBR Mbr; 654 DRIVE_LAYOUT_INFORMATION_GPT Gpt; 655 } DUMMYUNIONNAME; 656 PARTITION_INFORMATION_EX PartitionEntry[1]; 657 } DRIVE_LAYOUT_INFORMATION_EX,*PDRIVE_LAYOUT_INFORMATION_EX; 658 659 typedef enum _DETECTION_TYPE { 660 DetectNone,DetectInt13,DetectExInt13 661 } DETECTION_TYPE; 662 663 typedef struct _DISK_INT13_INFO { 664 WORD DriveSelect; 665 DWORD MaxCylinders; 666 WORD SectorsPerTrack; 667 WORD MaxHeads; 668 WORD NumberDrives; 669 } DISK_INT13_INFO,*PDISK_INT13_INFO; 670 671 typedef struct _DISK_EX_INT13_INFO { 672 WORD ExBufferSize; 673 WORD ExFlags; 674 DWORD ExCylinders; 675 DWORD ExHeads; 676 DWORD ExSectorsPerTrack; 677 DWORD64 ExSectorsPerDrive; 678 WORD ExSectorSize; 679 WORD ExReserved; 680 } DISK_EX_INT13_INFO,*PDISK_EX_INT13_INFO; 681 682 typedef struct _DISK_DETECTION_INFO { 683 DWORD SizeOfDetectInfo; 684 DETECTION_TYPE DetectionType; 685 __C89_NAMELESS union { 686 __C89_NAMELESS struct { 687 DISK_INT13_INFO Int13; 688 DISK_EX_INT13_INFO ExInt13; 689 } DUMMYSTRUCTNAME; 690 } DUMMYUNIONNAME; 691 } DISK_DETECTION_INFO,*PDISK_DETECTION_INFO; 692 693 typedef struct _DISK_PARTITION_INFO { 694 DWORD SizeOfPartitionInfo; 695 PARTITION_STYLE PartitionStyle; 696 __C89_NAMELESS union { 697 struct { 698 DWORD Signature; 699 DWORD CheckSum; 700 } Mbr; 701 struct { 702 GUID DiskId; 703 } Gpt; 704 } DUMMYUNIONNAME; 705 } DISK_PARTITION_INFO,*PDISK_PARTITION_INFO; 706 707 #define DiskGeometryGetPartition(Geometry) ((PDISK_PARTITION_INFO)((Geometry)->Data)) 708 #define DiskGeometryGetDetect(Geometry) ((PDISK_DETECTION_INFO)(((DWORD_PTR)DiskGeometryGetPartition(Geometry)+ DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo))) 709 710 typedef struct _DISK_GEOMETRY_EX { 711 DISK_GEOMETRY Geometry; 712 LARGE_INTEGER DiskSize; 713 BYTE Data[1]; 714 } DISK_GEOMETRY_EX,*PDISK_GEOMETRY_EX; 715 716 typedef struct _DISK_CONTROLLER_NUMBER { 717 DWORD ControllerNumber; 718 DWORD DiskNumber; 719 } DISK_CONTROLLER_NUMBER,*PDISK_CONTROLLER_NUMBER; 720 721 typedef enum { 722 EqualPriority,KeepPrefetchedData,KeepReadData 723 } DISK_CACHE_RETENTION_PRIORITY; 724 725 typedef struct _DISK_CACHE_INFORMATION { 726 BOOLEAN ParametersSavable; 727 BOOLEAN ReadCacheEnabled; 728 BOOLEAN WriteCacheEnabled; 729 DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; 730 DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; 731 WORD DisablePrefetchTransferLength; 732 BOOLEAN PrefetchScalar; 733 __C89_NAMELESS union { 734 struct { 735 WORD Minimum; 736 WORD Maximum; 737 WORD MaximumBlocks; 738 } ScalarPrefetch; 739 struct { 740 WORD Minimum; 741 WORD Maximum; 742 } BlockPrefetch; 743 } DUMMYUNIONNAME; 744 } DISK_CACHE_INFORMATION,*PDISK_CACHE_INFORMATION; 745 746 typedef struct _DISK_GROW_PARTITION { 747 DWORD PartitionNumber; 748 LARGE_INTEGER BytesToGrow; 749 } DISK_GROW_PARTITION,*PDISK_GROW_PARTITION; 750 751 #define HIST_NO_OF_BUCKETS 24 752 753 typedef struct _HISTOGRAM_BUCKET { 754 DWORD Reads; 755 DWORD Writes; 756 } HISTOGRAM_BUCKET,*PHISTOGRAM_BUCKET; 757 758 #define HISTOGRAM_BUCKET_SIZE sizeof(HISTOGRAM_BUCKET) 759 760 typedef struct _DISK_HISTOGRAM { 761 LARGE_INTEGER DiskSize; 762 LARGE_INTEGER Start; 763 LARGE_INTEGER End; 764 LARGE_INTEGER Average; 765 LARGE_INTEGER AverageRead; 766 LARGE_INTEGER AverageWrite; 767 DWORD Granularity; 768 DWORD Size; 769 DWORD ReadCount; 770 DWORD WriteCount; 771 PHISTOGRAM_BUCKET Histogram; 772 } DISK_HISTOGRAM,*PDISK_HISTOGRAM; 773 774 #define DISK_HISTOGRAM_SIZE sizeof(DISK_HISTOGRAM) 775 776 typedef struct _DISK_PERFORMANCE { 777 LARGE_INTEGER BytesRead; 778 LARGE_INTEGER BytesWritten; 779 LARGE_INTEGER ReadTime; 780 LARGE_INTEGER WriteTime; 781 LARGE_INTEGER IdleTime; 782 DWORD ReadCount; 783 DWORD WriteCount; 784 DWORD QueueDepth; 785 DWORD SplitCount; 786 LARGE_INTEGER QueryTime; 787 DWORD StorageDeviceNumber; 788 WCHAR StorageManagerName[8]; 789 } DISK_PERFORMANCE,*PDISK_PERFORMANCE; 790 791 typedef struct _DISK_RECORD { 792 LARGE_INTEGER ByteOffset; 793 LARGE_INTEGER StartTime; 794 LARGE_INTEGER EndTime; 795 PVOID VirtualAddress; 796 DWORD NumberOfBytes; 797 BYTE DeviceNumber; 798 BOOLEAN ReadRequest; 799 } DISK_RECORD,*PDISK_RECORD; 800 801 typedef struct _DISK_LOGGING { 802 BYTE Function; 803 PVOID BufferAddress; 804 DWORD BufferSize; 805 } DISK_LOGGING,*PDISK_LOGGING; 806 807 #define DISK_LOGGING_START 0 808 #define DISK_LOGGING_STOP 1 809 #define DISK_LOGGING_DUMP 2 810 #define DISK_BINNING 3 811 812 typedef enum _BIN_TYPES { 813 RequestSize,RequestLocation 814 } BIN_TYPES; 815 816 typedef struct _BIN_RANGE { 817 LARGE_INTEGER StartValue; 818 LARGE_INTEGER Length; 819 } BIN_RANGE,*PBIN_RANGE; 820 821 typedef struct _PERF_BIN { 822 DWORD NumberOfBins; 823 DWORD TypeOfBin; 824 BIN_RANGE BinsRanges[1]; 825 } PERF_BIN,*PPERF_BIN; 826 827 typedef struct _BIN_COUNT { 828 BIN_RANGE BinRange; 829 DWORD BinCount; 830 } BIN_COUNT,*PBIN_COUNT; 831 832 typedef struct _BIN_RESULTS { 833 DWORD NumberOfBins; 834 BIN_COUNT BinCounts[1]; 835 } BIN_RESULTS,*PBIN_RESULTS; 836 837 #include <pshpack1.h> 838 typedef struct _GETVERSIONINPARAMS { 839 BYTE bVersion; 840 BYTE bRevision; 841 BYTE bReserved; 842 BYTE bIDEDeviceMap; 843 DWORD fCapabilities; 844 DWORD dwReserved[4]; 845 } GETVERSIONINPARAMS,*PGETVERSIONINPARAMS,*LPGETVERSIONINPARAMS; 846 #include <poppack.h> 847 848 #define CAP_ATA_ID_CMD 1 849 #define CAP_ATAPI_ID_CMD 2 850 #define CAP_SMART_CMD 4 851 852 #include <pshpack1.h> 853 typedef struct _IDEREGS { 854 BYTE bFeaturesReg; 855 BYTE bSectorCountReg; 856 BYTE bSectorNumberReg; 857 BYTE bCylLowReg; 858 BYTE bCylHighReg; 859 BYTE bDriveHeadReg; 860 BYTE bCommandReg; 861 BYTE bReserved; 862 } IDEREGS,*PIDEREGS,*LPIDEREGS; 863 #include <poppack.h> 864 865 #define ATAPI_ID_CMD 0xA1 866 #define ID_CMD 0xEC 867 #define SMART_CMD 0xB0 868 869 #define SMART_CYL_LOW 0x4F 870 #define SMART_CYL_HI 0xC2 871 872 #include <pshpack1.h> 873 typedef struct _SENDCMDINPARAMS { 874 DWORD cBufferSize; 875 IDEREGS irDriveRegs; 876 BYTE bDriveNumber; 877 BYTE bReserved[3]; 878 DWORD dwReserved[4]; 879 BYTE bBuffer[1]; 880 } SENDCMDINPARAMS,*PSENDCMDINPARAMS,*LPSENDCMDINPARAMS; 881 #include <poppack.h> 882 883 #include <pshpack1.h> 884 typedef struct _DRIVERSTATUS { 885 BYTE bDriverError; 886 BYTE bIDEError; 887 BYTE bReserved[2]; 888 DWORD dwReserved[2]; 889 } DRIVERSTATUS,*PDRIVERSTATUS,*LPDRIVERSTATUS; 890 #include <poppack.h> 891 892 #define SMART_NO_ERROR 0 893 #define SMART_IDE_ERROR 1 894 #define SMART_INVALID_FLAG 2 895 #define SMART_INVALID_COMMAND 3 896 #define SMART_INVALID_BUFFER 4 897 #define SMART_INVALID_DRIVE 5 898 #define SMART_INVALID_IOCTL 6 899 #define SMART_ERROR_NO_MEM 7 900 #define SMART_INVALID_REGISTER 8 901 #define SMART_NOT_SUPPORTED 9 902 #define SMART_NO_IDE_DEVICE 10 903 904 #define SMART_OFFLINE_ROUTINE_OFFLINE 0 905 #define SMART_SHORT_SELFTEST_OFFLINE 1 906 #define SMART_EXTENDED_SELFTEST_OFFLINE 2 907 #define SMART_ABORT_OFFLINE_SELFTEST 127 908 #define SMART_SHORT_SELFTEST_CAPTIVE 129 909 #define SMART_EXTENDED_SELFTEST_CAPTIVE 130 910 911 #include <pshpack1.h> 912 typedef struct _SENDCMDOUTPARAMS { 913 DWORD cBufferSize; 914 DRIVERSTATUS DriverStatus; 915 BYTE bBuffer[1]; 916 } SENDCMDOUTPARAMS,*PSENDCMDOUTPARAMS,*LPSENDCMDOUTPARAMS; 917 #include <poppack.h> 918 919 #define READ_ATTRIBUTE_BUFFER_SIZE 512 920 #define IDENTIFY_BUFFER_SIZE 512 921 #define READ_THRESHOLD_BUFFER_SIZE 512 922 #define SMART_LOG_SECTOR_SIZE 512 923 924 #define READ_ATTRIBUTES 0xD0 925 #define READ_THRESHOLDS 0xD1 926 #define ENABLE_DISABLE_AUTOSAVE 0xD2 927 #define SAVE_ATTRIBUTE_VALUES 0xD3 928 #define EXECUTE_OFFLINE_DIAGS 0xD4 929 #define SMART_READ_LOG 0xD5 930 #define SMART_WRITE_LOG 0xd6 931 #define ENABLE_SMART 0xD8 932 #define DISABLE_SMART 0xD9 933 #define RETURN_SMART_STATUS 0xDA 934 #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB 935 936 #endif /* _NTDDDISK_H_ */ 937 938 939 #define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER 940 #define IOCTL_CHANGER_GET_PARAMETERS CTL_CODE(IOCTL_CHANGER_BASE,0x0000,METHOD_BUFFERED,FILE_READ_ACCESS) 941 #define IOCTL_CHANGER_GET_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS) 942 #define IOCTL_CHANGER_GET_PRODUCT_DATA CTL_CODE(IOCTL_CHANGER_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS) 943 #define IOCTL_CHANGER_SET_ACCESS CTL_CODE(IOCTL_CHANGER_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 944 #define IOCTL_CHANGER_GET_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0005,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 945 #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS) 946 #define IOCTL_CHANGER_SET_POSITION CTL_CODE(IOCTL_CHANGER_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS) 947 #define IOCTL_CHANGER_EXCHANGE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0008,METHOD_BUFFERED,FILE_READ_ACCESS) 948 #define IOCTL_CHANGER_MOVE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0009,METHOD_BUFFERED,FILE_READ_ACCESS) 949 #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT CTL_CODE(IOCTL_CHANGER_BASE,0x000A,METHOD_BUFFERED,FILE_READ_ACCESS) 950 #define IOCTL_CHANGER_QUERY_VOLUME_TAGS CTL_CODE(IOCTL_CHANGER_BASE,0x000B,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 951 952 #define MAX_VOLUME_ID_SIZE 36 953 #define MAX_VOLUME_TEMPLATE_SIZE 40 954 955 #define VENDOR_ID_LENGTH 8 956 #define PRODUCT_ID_LENGTH 16 957 #define REVISION_LENGTH 4 958 #define SERIAL_NUMBER_LENGTH 32 959 960 typedef enum _ELEMENT_TYPE { 961 AllElements,ChangerTransport,ChangerSlot,ChangerIEPort,ChangerDrive,ChangerDoor,ChangerKeypad,ChangerMaxElement 962 } ELEMENT_TYPE,*PELEMENT_TYPE; 963 964 typedef struct _CHANGER_ELEMENT { 965 ELEMENT_TYPE ElementType; 966 DWORD ElementAddress; 967 } CHANGER_ELEMENT,*PCHANGER_ELEMENT; 968 969 typedef struct _CHANGER_ELEMENT_LIST { 970 CHANGER_ELEMENT Element; 971 DWORD NumberOfElements; 972 } CHANGER_ELEMENT_LIST ,*PCHANGER_ELEMENT_LIST; 973 974 #define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001 975 #define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002 976 #define CHANGER_CLOSE_IEPORT 0x00000004 977 #define CHANGER_OPEN_IEPORT 0x00000008 978 979 #define CHANGER_STATUS_NON_VOLATILE 0x00000010 980 #define CHANGER_EXCHANGE_MEDIA 0x00000020 981 #define CHANGER_CLEANER_SLOT 0x00000040 982 #define CHANGER_LOCK_UNLOCK 0x00000080 983 984 #define CHANGER_CARTRIDGE_MAGAZINE 0x00000100 985 #define CHANGER_MEDIUM_FLIP 0x00000200 986 #define CHANGER_POSITION_TO_ELEMENT 0x00000400 987 #define CHANGER_REPORT_IEPORT_STATE 0x00000800 988 989 #define CHANGER_STORAGE_DRIVE 0x00001000 990 #define CHANGER_STORAGE_IEPORT 0x00002000 991 #define CHANGER_STORAGE_SLOT 0x00004000 992 #define CHANGER_STORAGE_TRANSPORT 0x00008000 993 994 #define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000 995 996 #define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000 997 998 #define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000 999 #define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000 1000 1001 #define CHANGER_VOLUME_IDENTIFICATION 0x00100000 1002 #define CHANGER_VOLUME_SEARCH 0x00200000 1003 #define CHANGER_VOLUME_ASSERT 0x00400000 1004 #define CHANGER_VOLUME_REPLACE 0x00800000 1005 #define CHANGER_VOLUME_UNDEFINE 0x01000000 1006 1007 #define CHANGER_SERIAL_NUMBER_VALID 0x04000000 1008 1009 #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000 1010 #define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000 1011 #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000 1012 1013 #define CHANGER_RESERVED_BIT 0x80000000 1014 1015 #define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT 0x80000001 1016 #define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE 0x80000002 1017 #define CHANGER_CLEANER_AUTODISMOUNT 0x80000004 1018 #define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008 1019 #define CHANGER_SLOTS_USE_TRAYS 0x80000010 1020 #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020 1021 #define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040 1022 #define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080 1023 #define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100 1024 #define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200 1025 #define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400 1026 1027 #define CHANGER_TO_TRANSPORT 0x01 1028 #define CHANGER_TO_SLOT 0x02 1029 #define CHANGER_TO_IEPORT 0x04 1030 #define CHANGER_TO_DRIVE 0x08 1031 1032 #define LOCK_UNLOCK_IEPORT 0x01 1033 #define LOCK_UNLOCK_DOOR 0x02 1034 #define LOCK_UNLOCK_KEYPAD 0x04 1035 1036 typedef struct _GET_CHANGER_PARAMETERS { 1037 DWORD Size; 1038 WORD NumberTransportElements; 1039 WORD NumberStorageElements; 1040 WORD NumberCleanerSlots; 1041 WORD NumberIEElements; 1042 WORD NumberDataTransferElements; 1043 WORD NumberOfDoors; 1044 WORD FirstSlotNumber; 1045 WORD FirstDriveNumber; 1046 WORD FirstTransportNumber; 1047 WORD FirstIEPortNumber; 1048 WORD FirstCleanerSlotAddress; 1049 WORD MagazineSize; 1050 DWORD DriveCleanTimeout; 1051 DWORD Features0; 1052 DWORD Features1; 1053 BYTE MoveFromTransport; 1054 BYTE MoveFromSlot; 1055 BYTE MoveFromIePort; 1056 BYTE MoveFromDrive; 1057 BYTE ExchangeFromTransport; 1058 BYTE ExchangeFromSlot; 1059 BYTE ExchangeFromIePort; 1060 BYTE ExchangeFromDrive; 1061 BYTE LockUnlockCapabilities; 1062 BYTE PositionCapabilities; 1063 BYTE Reserved1[2]; 1064 DWORD Reserved2[2]; 1065 } GET_CHANGER_PARAMETERS,*PGET_CHANGER_PARAMETERS; 1066 1067 typedef struct _CHANGER_PRODUCT_DATA { 1068 BYTE VendorId[VENDOR_ID_LENGTH]; 1069 BYTE ProductId[PRODUCT_ID_LENGTH]; 1070 BYTE Revision[REVISION_LENGTH]; 1071 BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; 1072 BYTE DeviceType; 1073 } CHANGER_PRODUCT_DATA,*PCHANGER_PRODUCT_DATA; 1074 1075 #define LOCK_ELEMENT 0 1076 #define UNLOCK_ELEMENT 1 1077 #define EXTEND_IEPORT 2 1078 #define RETRACT_IEPORT 3 1079 1080 typedef struct _CHANGER_SET_ACCESS { 1081 CHANGER_ELEMENT Element; 1082 DWORD Control; 1083 } CHANGER_SET_ACCESS,*PCHANGER_SET_ACCESS; 1084 1085 typedef struct _CHANGER_READ_ELEMENT_STATUS { 1086 CHANGER_ELEMENT_LIST ElementList; 1087 BOOLEAN VolumeTagInfo; 1088 } CHANGER_READ_ELEMENT_STATUS,*PCHANGER_READ_ELEMENT_STATUS; 1089 1090 typedef struct _CHANGER_ELEMENT_STATUS { 1091 CHANGER_ELEMENT Element; 1092 CHANGER_ELEMENT SrcElementAddress; 1093 DWORD Flags; 1094 DWORD ExceptionCode; 1095 BYTE TargetId; 1096 BYTE Lun; 1097 WORD Reserved; 1098 BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 1099 BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 1100 } CHANGER_ELEMENT_STATUS,*PCHANGER_ELEMENT_STATUS; 1101 1102 typedef struct _CHANGER_ELEMENT_STATUS_EX { 1103 CHANGER_ELEMENT Element; 1104 CHANGER_ELEMENT SrcElementAddress; 1105 DWORD Flags; 1106 DWORD ExceptionCode; 1107 BYTE TargetId; 1108 BYTE Lun; 1109 WORD Reserved; 1110 BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; 1111 BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; 1112 BYTE VendorIdentification[VENDOR_ID_LENGTH]; 1113 BYTE ProductIdentification[PRODUCT_ID_LENGTH]; 1114 BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; 1115 } CHANGER_ELEMENT_STATUS_EX,*PCHANGER_ELEMENT_STATUS_EX; 1116 1117 #define ELEMENT_STATUS_FULL 0x00000001 1118 #define ELEMENT_STATUS_IMPEXP 0x00000002 1119 #define ELEMENT_STATUS_EXCEPT 0x00000004 1120 #define ELEMENT_STATUS_ACCESS 0x00000008 1121 #define ELEMENT_STATUS_EXENAB 0x00000010 1122 #define ELEMENT_STATUS_INENAB 0x00000020 1123 1124 #define ELEMENT_STATUS_PRODUCT_DATA 0x00000040 1125 1126 #define ELEMENT_STATUS_LUN_VALID 0x00001000 1127 #define ELEMENT_STATUS_ID_VALID 0x00002000 1128 #define ELEMENT_STATUS_NOT_BUS 0x00008000 1129 #define ELEMENT_STATUS_INVERT 0x00400000 1130 #define ELEMENT_STATUS_SVALID 0x00800000 1131 1132 #define ELEMENT_STATUS_PVOLTAG 0x10000000 1133 #define ELEMENT_STATUS_AVOLTAG 0x20000000 1134 1135 #define ERROR_LABEL_UNREADABLE 0x00000001 1136 #define ERROR_LABEL_QUESTIONABLE 0x00000002 1137 #define ERROR_SLOT_NOT_PRESENT 0x00000004 1138 #define ERROR_DRIVE_NOT_INSTALLED 0x00000008 1139 #define ERROR_TRAY_MALFUNCTION 0x00000010 1140 #define ERROR_INIT_STATUS_NEEDED 0x00000011 1141 #define ERROR_UNHANDLED_ERROR 0xFFFFFFFF 1142 1143 typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS { 1144 CHANGER_ELEMENT_LIST ElementList; 1145 BOOLEAN BarCodeScan; 1146 } CHANGER_INITIALIZE_ELEMENT_STATUS,*PCHANGER_INITIALIZE_ELEMENT_STATUS; 1147 1148 typedef struct _CHANGER_SET_POSITION { 1149 CHANGER_ELEMENT Transport; 1150 CHANGER_ELEMENT Destination; 1151 BOOLEAN Flip; 1152 } CHANGER_SET_POSITION,*PCHANGER_SET_POSITION; 1153 1154 typedef struct _CHANGER_EXCHANGE_MEDIUM { 1155 CHANGER_ELEMENT Transport; 1156 CHANGER_ELEMENT Source; 1157 CHANGER_ELEMENT Destination1; 1158 CHANGER_ELEMENT Destination2; 1159 BOOLEAN Flip1; 1160 BOOLEAN Flip2; 1161 } CHANGER_EXCHANGE_MEDIUM,*PCHANGER_EXCHANGE_MEDIUM; 1162 1163 typedef struct _CHANGER_MOVE_MEDIUM { 1164 CHANGER_ELEMENT Transport; 1165 CHANGER_ELEMENT Source; 1166 CHANGER_ELEMENT Destination; 1167 BOOLEAN Flip; 1168 } CHANGER_MOVE_MEDIUM,*PCHANGER_MOVE_MEDIUM; 1169 1170 typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION { 1171 CHANGER_ELEMENT StartingElement; 1172 DWORD ActionCode; 1173 BYTE VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE]; 1174 } CHANGER_SEND_VOLUME_TAG_INFORMATION,*PCHANGER_SEND_VOLUME_TAG_INFORMATION; 1175 1176 typedef struct _READ_ELEMENT_ADDRESS_INFO { 1177 DWORD NumberOfElements; 1178 CHANGER_ELEMENT_STATUS ElementStatus[1]; 1179 } READ_ELEMENT_ADDRESS_INFO,*PREAD_ELEMENT_ADDRESS_INFO; 1180 1181 #define SEARCH_ALL 0x0 1182 #define SEARCH_PRIMARY 0x1 1183 #define SEARCH_ALTERNATE 0x2 1184 #define SEARCH_ALL_NO_SEQ 0x4 1185 #define SEARCH_PRI_NO_SEQ 0x5 1186 #define SEARCH_ALT_NO_SEQ 0x6 1187 1188 #define ASSERT_PRIMARY 0x8 1189 #define ASSERT_ALTERNATE 0x9 1190 1191 #define REPLACE_PRIMARY 0xA 1192 #define REPLACE_ALTERNATE 0xB 1193 1194 #define UNDEFINE_PRIMARY 0xC 1195 #define UNDEFINE_ALTERNATE 0xD 1196 1197 typedef enum _CHANGER_DEVICE_PROBLEM_TYPE { 1198 DeviceProblemNone,DeviceProblemHardware,DeviceProblemCHMError,DeviceProblemDoorOpen,DeviceProblemCalibrationError,DeviceProblemTargetFailure, 1199 DeviceProblemCHMMoveError,DeviceProblemCHMZeroError,DeviceProblemCartridgeInsertError,DeviceProblemPositionError,DeviceProblemSensorError, 1200 DeviceProblemCartridgeEjectError,DeviceProblemGripperError,DeviceProblemDriveError 1201 } CHANGER_DEVICE_PROBLEM_TYPE,*PCHANGER_DEVICE_PROBLEM_TYPE; 1202 1203 #define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS) 1204 1205 #define IOCTL_SERENUM_EXPOSE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,128,METHOD_BUFFERED,FILE_ANY_ACCESS) 1206 #define IOCTL_SERENUM_REMOVE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,129,METHOD_BUFFERED,FILE_ANY_ACCESS) 1207 #define IOCTL_SERENUM_PORT_DESC CTL_CODE(FILE_DEVICE_SERENUM,130,METHOD_BUFFERED,FILE_ANY_ACCESS) 1208 #define IOCTL_SERENUM_GET_PORT_NAME CTL_CODE(FILE_DEVICE_SERENUM,131,METHOD_BUFFERED,FILE_ANY_ACCESS) 1209 1210 #define SERIAL_LSRMST_ESCAPE ((BYTE)0x00) 1211 1212 #define SERIAL_LSRMST_LSR_DATA ((BYTE)0x01) 1213 1214 #define SERIAL_LSRMST_LSR_NODATA ((BYTE)0x02) 1215 1216 #define SERIAL_LSRMST_MST ((BYTE)0x03) 1217 1218 #define SERIAL_IOC_FCR_FIFO_ENABLE ((DWORD)0x00000001) 1219 #define SERIAL_IOC_FCR_RCVR_RESET ((DWORD)0x00000002) 1220 #define SERIAL_IOC_FCR_XMIT_RESET ((DWORD)0x00000004) 1221 #define SERIAL_IOC_FCR_DMA_MODE ((DWORD)0x00000008) 1222 #define SERIAL_IOC_FCR_RES1 ((DWORD)0x00000010) 1223 #define SERIAL_IOC_FCR_RES2 ((DWORD)0x00000020) 1224 #define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB ((DWORD)0x00000040) 1225 #define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB ((DWORD)0x00000080) 1226 1227 #define SERIAL_IOC_MCR_DTR ((DWORD)0x00000001) 1228 #define SERIAL_IOC_MCR_RTS ((DWORD)0x00000002) 1229 #define SERIAL_IOC_MCR_OUT1 ((DWORD)0x00000004) 1230 #define SERIAL_IOC_MCR_OUT2 ((DWORD)0x00000008) 1231 #define SERIAL_IOC_MCR_LOOP ((DWORD)0x00000010) 1232 1233 #ifndef _FILESYSTEMFSCTL_ 1234 #define _FILESYSTEMFSCTL_ 1235 1236 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,0,METHOD_BUFFERED,FILE_ANY_ACCESS) 1237 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,1,METHOD_BUFFERED,FILE_ANY_ACCESS) 1238 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,2,METHOD_BUFFERED,FILE_ANY_ACCESS) 1239 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,3,METHOD_BUFFERED,FILE_ANY_ACCESS) 1240 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,4,METHOD_BUFFERED,FILE_ANY_ACCESS) 1241 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,5,METHOD_BUFFERED,FILE_ANY_ACCESS) 1242 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,6,METHOD_BUFFERED,FILE_ANY_ACCESS) 1243 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,7,METHOD_BUFFERED,FILE_ANY_ACCESS) 1244 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,8,METHOD_BUFFERED,FILE_ANY_ACCESS) 1245 1246 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,10,METHOD_BUFFERED,FILE_ANY_ACCESS) 1247 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,11,METHOD_BUFFERED,FILE_ANY_ACCESS) 1248 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,12,METHOD_BUFFERED,FILE_ANY_ACCESS) 1249 1250 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,14,METHOD_NEITHER,FILE_ANY_ACCESS) 1251 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,15,METHOD_BUFFERED,FILE_ANY_ACCESS) 1252 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) 1253 1254 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,19,METHOD_NEITHER,FILE_ANY_ACCESS) 1255 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,20,METHOD_BUFFERED,FILE_ANY_ACCESS) 1256 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,21,METHOD_BUFFERED,FILE_ANY_ACCESS) 1257 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM,22,METHOD_BUFFERED,FILE_ANY_ACCESS) 1258 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,23,METHOD_BUFFERED,FILE_ANY_ACCESS) 1259 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,24,METHOD_BUFFERED,FILE_ANY_ACCESS) 1260 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25,METHOD_BUFFERED,FILE_ANY_ACCESS) 1261 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,26,METHOD_BUFFERED,FILE_ANY_ACCESS) 1262 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27,METHOD_NEITHER,FILE_ANY_ACCESS) 1263 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28,METHOD_NEITHER,FILE_ANY_ACCESS) 1264 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1265 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,30,METHOD_BUFFERED,FILE_ANY_ACCESS) 1266 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,32,METHOD_NEITHER,FILE_ANY_ACCESS) 1267 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,35,METHOD_NEITHER,FILE_ANY_ACCESS) 1268 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,38,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1269 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,39,METHOD_BUFFERED,FILE_ANY_ACCESS) 1270 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,40,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1271 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,41,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1272 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,42,METHOD_BUFFERED,FILE_ANY_ACCESS) 1273 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,43,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1274 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_ANY_ACCESS) 1275 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,45,METHOD_NEITHER,FILE_READ_DATA) 1276 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,46,METHOD_NEITHER,FILE_ANY_ACCESS) 1277 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,47,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1278 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,48,METHOD_BUFFERED,FILE_ANY_ACCESS) 1279 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,49,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1280 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,50,METHOD_BUFFERED,FILE_WRITE_DATA) 1281 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,51,METHOD_NEITHER,FILE_READ_DATA) 1282 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,53,METHOD_NEITHER,FILE_ANY_ACCESS) 1283 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,54,METHOD_NEITHER,FILE_ANY_ACCESS) 1284 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,55,METHOD_NEITHER,FILE_SPECIAL_ACCESS) 1285 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,56,METHOD_NEITHER,FILE_SPECIAL_ACCESS) 1286 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,57,METHOD_NEITHER,FILE_ANY_ACCESS) 1287 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,58,METHOD_NEITHER,FILE_ANY_ACCESS) 1288 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,59,METHOD_NEITHER,FILE_ANY_ACCESS) 1289 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS) 1290 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,61,METHOD_BUFFERED,FILE_ANY_ACCESS) 1291 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,62,METHOD_BUFFERED,FILE_ANY_ACCESS) 1292 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,63,METHOD_BUFFERED,FILE_ANY_ACCESS) 1293 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,64,METHOD_BUFFERED,FILE_ANY_ACCESS) 1294 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,65,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) 1295 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM,66,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) 1296 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,68,METHOD_NEITHER,FILE_READ_DATA | FILE_WRITE_DATA) 1297 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,69,METHOD_NEITHER,FILE_ANY_ACCESS) 1298 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM,71,METHOD_OUT_DIRECT,FILE_READ_DATA) 1299 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM,72,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) 1300 1301 typedef struct _PATHNAME_BUFFER { 1302 DWORD PathNameLength; 1303 WCHAR Name[1]; 1304 } PATHNAME_BUFFER,*PPATHNAME_BUFFER; 1305 1306 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER { 1307 BYTE First0x24BytesOfBootSector[0x24]; 1308 } FSCTL_QUERY_FAT_BPB_BUFFER,*PFSCTL_QUERY_FAT_BPB_BUFFER; 1309 1310 typedef struct { 1311 LARGE_INTEGER VolumeSerialNumber; 1312 LARGE_INTEGER NumberSectors; 1313 LARGE_INTEGER TotalClusters; 1314 LARGE_INTEGER FreeClusters; 1315 LARGE_INTEGER TotalReserved; 1316 DWORD BytesPerSector; 1317 DWORD BytesPerCluster; 1318 DWORD BytesPerFileRecordSegment; 1319 DWORD ClustersPerFileRecordSegment; 1320 LARGE_INTEGER MftValidDataLength; 1321 LARGE_INTEGER MftStartLcn; 1322 LARGE_INTEGER Mft2StartLcn; 1323 LARGE_INTEGER MftZoneStart; 1324 LARGE_INTEGER MftZoneEnd; 1325 } NTFS_VOLUME_DATA_BUFFER,*PNTFS_VOLUME_DATA_BUFFER; 1326 1327 typedef struct { 1328 DWORD ByteCount; 1329 WORD MajorVersion; 1330 WORD MinorVersion; 1331 } NTFS_EXTENDED_VOLUME_DATA,*PNTFS_EXTENDED_VOLUME_DATA; 1332 1333 typedef struct { 1334 LARGE_INTEGER StartingLcn; 1335 } STARTING_LCN_INPUT_BUFFER,*PSTARTING_LCN_INPUT_BUFFER; 1336 1337 typedef struct { 1338 LARGE_INTEGER StartingLcn; 1339 LARGE_INTEGER BitmapSize; 1340 BYTE Buffer[1]; 1341 } VOLUME_BITMAP_BUFFER,*PVOLUME_BITMAP_BUFFER; 1342 1343 typedef struct { 1344 LARGE_INTEGER StartingVcn; 1345 } STARTING_VCN_INPUT_BUFFER,*PSTARTING_VCN_INPUT_BUFFER; 1346 1347 typedef struct RETRIEVAL_POINTERS_BUFFER { 1348 DWORD ExtentCount; 1349 LARGE_INTEGER StartingVcn; 1350 struct { 1351 LARGE_INTEGER NextVcn; 1352 LARGE_INTEGER Lcn; 1353 } Extents[1]; 1354 } RETRIEVAL_POINTERS_BUFFER,*PRETRIEVAL_POINTERS_BUFFER; 1355 1356 typedef struct { 1357 LARGE_INTEGER FileReferenceNumber; 1358 } NTFS_FILE_RECORD_INPUT_BUFFER,*PNTFS_FILE_RECORD_INPUT_BUFFER; 1359 1360 typedef struct { 1361 LARGE_INTEGER FileReferenceNumber; 1362 DWORD FileRecordLength; 1363 BYTE FileRecordBuffer[1]; 1364 } NTFS_FILE_RECORD_OUTPUT_BUFFER,*PNTFS_FILE_RECORD_OUTPUT_BUFFER; 1365 1366 typedef struct { 1367 HANDLE FileHandle; 1368 LARGE_INTEGER StartingVcn; 1369 LARGE_INTEGER StartingLcn; 1370 DWORD ClusterCount; 1371 } MOVE_FILE_DATA,*PMOVE_FILE_DATA; 1372 1373 #ifdef _WIN64 1374 typedef struct _MOVE_FILE_DATA32 { 1375 UINT32 FileHandle; 1376 LARGE_INTEGER StartingVcn; 1377 LARGE_INTEGER StartingLcn; 1378 DWORD ClusterCount; 1379 } MOVE_FILE_DATA32,*PMOVE_FILE_DATA32; 1380 #endif 1381 1382 typedef struct { 1383 DWORD Restart; 1384 SID Sid; 1385 } FIND_BY_SID_DATA,*PFIND_BY_SID_DATA; 1386 1387 typedef struct { 1388 DWORD NextEntryOffset; 1389 DWORD FileIndex; 1390 DWORD FileNameLength; 1391 WCHAR FileName[1]; 1392 } FIND_BY_SID_OUTPUT,*PFIND_BY_SID_OUTPUT; 1393 1394 typedef struct { 1395 DWORDLONG StartFileReferenceNumber; 1396 USN LowUsn; 1397 USN HighUsn; 1398 } MFT_ENUM_DATA,*PMFT_ENUM_DATA; 1399 1400 typedef struct { 1401 DWORDLONG MaximumSize; 1402 DWORDLONG AllocationDelta; 1403 } CREATE_USN_JOURNAL_DATA,*PCREATE_USN_JOURNAL_DATA; 1404 1405 typedef struct { 1406 USN StartUsn; 1407 DWORD ReasonMask; 1408 DWORD ReturnOnlyOnClose; 1409 DWORDLONG Timeout; 1410 DWORDLONG BytesToWaitFor; 1411 DWORDLONG UsnJournalID; 1412 } READ_USN_JOURNAL_DATA,*PREAD_USN_JOURNAL_DATA; 1413 1414 typedef struct { 1415 DWORD RecordLength; 1416 WORD MajorVersion; 1417 WORD MinorVersion; 1418 DWORDLONG FileReferenceNumber; 1419 DWORDLONG ParentFileReferenceNumber; 1420 USN Usn; 1421 LARGE_INTEGER TimeStamp; 1422 DWORD Reason; 1423 DWORD SourceInfo; 1424 DWORD SecurityId; 1425 DWORD FileAttributes; 1426 WORD FileNameLength; 1427 WORD FileNameOffset; 1428 WCHAR FileName[1]; 1429 } USN_RECORD,*PUSN_RECORD; 1430 1431 #define USN_PAGE_SIZE (0x1000) 1432 1433 #define USN_REASON_DATA_OVERWRITE (0x00000001) 1434 #define USN_REASON_DATA_EXTEND (0x00000002) 1435 #define USN_REASON_DATA_TRUNCATION (0x00000004) 1436 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010) 1437 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020) 1438 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040) 1439 #define USN_REASON_FILE_CREATE (0x00000100) 1440 #define USN_REASON_FILE_DELETE (0x00000200) 1441 #define USN_REASON_EA_CHANGE (0x00000400) 1442 #define USN_REASON_SECURITY_CHANGE (0x00000800) 1443 #define USN_REASON_RENAME_OLD_NAME (0x00001000) 1444 #define USN_REASON_RENAME_NEW_NAME (0x00002000) 1445 #define USN_REASON_INDEXABLE_CHANGE (0x00004000) 1446 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000) 1447 #define USN_REASON_HARD_LINK_CHANGE (0x00010000) 1448 #define USN_REASON_COMPRESSION_CHANGE (0x00020000) 1449 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000) 1450 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000) 1451 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000) 1452 #define USN_REASON_STREAM_CHANGE (0x00200000) 1453 1454 #define USN_REASON_CLOSE (0x80000000) 1455 1456 typedef struct { 1457 DWORDLONG UsnJournalID; 1458 USN FirstUsn; 1459 USN NextUsn; 1460 USN LowestValidUsn; 1461 USN MaxUsn; 1462 DWORDLONG MaximumSize; 1463 DWORDLONG AllocationDelta; 1464 } USN_JOURNAL_DATA,*PUSN_JOURNAL_DATA; 1465 1466 typedef struct { 1467 DWORDLONG UsnJournalID; 1468 DWORD DeleteFlags; 1469 } DELETE_USN_JOURNAL_DATA,*PDELETE_USN_JOURNAL_DATA; 1470 1471 #define USN_DELETE_FLAG_DELETE (0x00000001) 1472 #define USN_DELETE_FLAG_NOTIFY (0x00000002) 1473 1474 #define USN_DELETE_VALID_FLAGS (0x00000003) 1475 1476 typedef struct { 1477 DWORD UsnSourceInfo; 1478 HANDLE VolumeHandle; 1479 DWORD HandleInfo; 1480 } MARK_HANDLE_INFO,*PMARK_HANDLE_INFO; 1481 1482 #ifdef _WIN64 1483 1484 typedef struct { 1485 DWORD UsnSourceInfo; 1486 UINT32 VolumeHandle; 1487 DWORD HandleInfo; 1488 1489 } MARK_HANDLE_INFO32,*PMARK_HANDLE_INFO32; 1490 #endif 1491 1492 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001) 1493 #define USN_SOURCE_AUXILIARY_DATA (0x00000002) 1494 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004) 1495 1496 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001) 1497 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004) 1498 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008) 1499 #define MARK_HANDLE_REALTIME (0x00000020) 1500 #define MARK_HANDLE_NOT_REALTIME (0x00000040) 1501 1502 typedef struct { 1503 ACCESS_MASK DesiredAccess; 1504 DWORD SecurityIds[1]; 1505 } BULK_SECURITY_TEST_DATA,*PBULK_SECURITY_TEST_DATA; 1506 1507 #define VOLUME_IS_DIRTY (0x00000001) 1508 #define VOLUME_UPGRADE_SCHEDULED (0x00000002) 1509 1510 typedef struct _FILE_PREFETCH { 1511 DWORD Type; 1512 DWORD Count; 1513 DWORDLONG Prefetch[1]; 1514 } FILE_PREFETCH,*PFILE_PREFETCH; 1515 1516 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1 1517 1518 typedef struct _FILESYSTEM_STATISTICS { 1519 WORD FileSystemType; 1520 WORD Version; 1521 DWORD SizeOfCompleteStructure; 1522 DWORD UserFileReads; 1523 DWORD UserFileReadBytes; 1524 DWORD UserDiskReads; 1525 DWORD UserFileWrites; 1526 DWORD UserFileWriteBytes; 1527 DWORD UserDiskWrites; 1528 DWORD MetaDataReads; 1529 DWORD MetaDataReadBytes; 1530 DWORD MetaDataDiskReads; 1531 DWORD MetaDataWrites; 1532 DWORD MetaDataWriteBytes; 1533 DWORD MetaDataDiskWrites; 1534 } FILESYSTEM_STATISTICS,*PFILESYSTEM_STATISTICS; 1535 1536 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1 1537 #define FILESYSTEM_STATISTICS_TYPE_FAT 2 1538 1539 typedef struct _FAT_STATISTICS { 1540 DWORD CreateHits; 1541 DWORD SuccessfulCreates; 1542 DWORD FailedCreates; 1543 DWORD NonCachedReads; 1544 DWORD NonCachedReadBytes; 1545 DWORD NonCachedWrites; 1546 DWORD NonCachedWriteBytes; 1547 DWORD NonCachedDiskReads; 1548 DWORD NonCachedDiskWrites; 1549 } FAT_STATISTICS,*PFAT_STATISTICS; 1550 1551 typedef struct _EXFAT_STATISTICS { 1552 DWORD CreateHits; 1553 DWORD SuccessfulCreates; 1554 DWORD FailedCreates; 1555 DWORD NonCachedReads; 1556 DWORD NonCachedReadBytes; 1557 DWORD NonCachedWrites; 1558 DWORD NonCachedWriteBytes; 1559 DWORD NonCachedDiskReads; 1560 DWORD NonCachedDiskWrites; 1561 } EXFAT_STATISTICS, *PEXFAT_STATISTICS; 1562 1563 typedef struct _NTFS_STATISTICS { 1564 DWORD LogFileFullExceptions; 1565 DWORD OtherExceptions; 1566 DWORD MftReads; 1567 DWORD MftReadBytes; 1568 DWORD MftWrites; 1569 DWORD MftWriteBytes; 1570 struct { 1571 WORD Write; 1572 WORD Create; 1573 WORD SetInfo; 1574 WORD Flush; 1575 } MftWritesUserLevel; 1576 WORD MftWritesFlushForLogFileFull; 1577 WORD MftWritesLazyWriter; 1578 WORD MftWritesUserRequest; 1579 DWORD Mft2Writes; 1580 DWORD Mft2WriteBytes; 1581 struct { 1582 WORD Write; 1583 WORD Create; 1584 WORD SetInfo; 1585 WORD Flush; 1586 } Mft2WritesUserLevel; 1587 WORD Mft2WritesFlushForLogFileFull; 1588 WORD Mft2WritesLazyWriter; 1589 WORD Mft2WritesUserRequest; 1590 DWORD RootIndexReads; 1591 DWORD RootIndexReadBytes; 1592 DWORD RootIndexWrites; 1593 DWORD RootIndexWriteBytes; 1594 DWORD BitmapReads; 1595 DWORD BitmapReadBytes; 1596 DWORD BitmapWrites; 1597 DWORD BitmapWriteBytes; 1598 WORD BitmapWritesFlushForLogFileFull; 1599 WORD BitmapWritesLazyWriter; 1600 WORD BitmapWritesUserRequest; 1601 struct { 1602 WORD Write; 1603 WORD Create; 1604 WORD SetInfo; 1605 } BitmapWritesUserLevel; 1606 DWORD MftBitmapReads; 1607 DWORD MftBitmapReadBytes; 1608 DWORD MftBitmapWrites; 1609 DWORD MftBitmapWriteBytes; 1610 WORD MftBitmapWritesFlushForLogFileFull; 1611 WORD MftBitmapWritesLazyWriter; 1612 WORD MftBitmapWritesUserRequest; 1613 struct { 1614 WORD Write; 1615 WORD Create; 1616 WORD SetInfo; 1617 WORD Flush; 1618 } MftBitmapWritesUserLevel; 1619 DWORD UserIndexReads; 1620 DWORD UserIndexReadBytes; 1621 DWORD UserIndexWrites; 1622 DWORD UserIndexWriteBytes; 1623 DWORD LogFileReads; 1624 DWORD LogFileReadBytes; 1625 DWORD LogFileWrites; 1626 DWORD LogFileWriteBytes; 1627 struct { 1628 DWORD Calls; 1629 DWORD Clusters; 1630 DWORD Hints; 1631 DWORD RunsReturned; 1632 DWORD HintsHonored; 1633 DWORD HintsClusters; 1634 DWORD Cache; 1635 DWORD CacheClusters; 1636 DWORD CacheMiss; 1637 DWORD CacheMissClusters; 1638 } Allocate; 1639 } NTFS_STATISTICS,*PNTFS_STATISTICS; 1640 1641 typedef struct _FILE_OBJECTID_BUFFER { 1642 BYTE ObjectId[16]; 1643 __C89_NAMELESS union { 1644 __C89_NAMELESS struct { 1645 BYTE BirthVolumeId[16]; 1646 BYTE BirthObjectId[16]; 1647 BYTE DomainId[16]; 1648 } DUMMYSTRUCTNAME; 1649 BYTE ExtendedInfo[48]; 1650 } DUMMYUNIONNAME; 1651 } FILE_OBJECTID_BUFFER,*PFILE_OBJECTID_BUFFER; 1652 1653 typedef struct _FILE_SET_SPARSE_BUFFER { 1654 BOOLEAN SetSparse; 1655 } FILE_SET_SPARSE_BUFFER,*PFILE_SET_SPARSE_BUFFER; 1656 1657 typedef struct _FILE_ZERO_DATA_INFORMATION { 1658 LARGE_INTEGER FileOffset; 1659 LARGE_INTEGER BeyondFinalZero; 1660 } FILE_ZERO_DATA_INFORMATION,*PFILE_ZERO_DATA_INFORMATION; 1661 1662 typedef struct _FILE_ALLOCATED_RANGE_BUFFER { 1663 LARGE_INTEGER FileOffset; 1664 LARGE_INTEGER Length; 1665 } FILE_ALLOCATED_RANGE_BUFFER,*PFILE_ALLOCATED_RANGE_BUFFER; 1666 1667 typedef struct _ENCRYPTION_BUFFER { 1668 DWORD EncryptionOperation; 1669 BYTE Private[1]; 1670 } ENCRYPTION_BUFFER,*PENCRYPTION_BUFFER; 1671 1672 #define FILE_SET_ENCRYPTION 0x00000001 1673 #define FILE_CLEAR_ENCRYPTION 0x00000002 1674 #define STREAM_SET_ENCRYPTION 0x00000003 1675 #define STREAM_CLEAR_ENCRYPTION 0x00000004 1676 1677 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004 1678 1679 typedef struct _DECRYPTION_STATUS_BUFFER { 1680 BOOLEAN NoEncryptedStreams; 1681 } DECRYPTION_STATUS_BUFFER,*PDECRYPTION_STATUS_BUFFER; 1682 1683 #define ENCRYPTION_FORMAT_DEFAULT (0x01) 1684 #define COMPRESSION_FORMAT_SPARSE (0x4000) 1685 1686 typedef struct _REQUEST_RAW_ENCRYPTED_DATA { 1687 LONGLONG FileOffset; 1688 DWORD Length; 1689 } REQUEST_RAW_ENCRYPTED_DATA,*PREQUEST_RAW_ENCRYPTED_DATA; 1690 1691 typedef struct _ENCRYPTED_DATA_INFO { 1692 DWORDLONG StartingFileOffset; 1693 DWORD OutputBufferOffset; 1694 DWORD BytesWithinFileSize; 1695 DWORD BytesWithinValidDataLength; 1696 WORD CompressionFormat; 1697 BYTE DataUnitShift; 1698 BYTE ChunkShift; 1699 BYTE ClusterShift; 1700 BYTE EncryptionFormat; 1701 WORD NumberOfDataBlocks; 1702 DWORD DataBlockSize[ANYSIZE_ARRAY]; 1703 } ENCRYPTED_DATA_INFO; 1704 typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO; 1705 1706 typedef struct _PLEX_READ_DATA_REQUEST { 1707 LARGE_INTEGER ByteOffset; 1708 DWORD ByteLength; 1709 DWORD PlexNumber; 1710 } PLEX_READ_DATA_REQUEST,*PPLEX_READ_DATA_REQUEST; 1711 1712 typedef struct _SI_COPYFILE { 1713 DWORD SourceFileNameLength; 1714 DWORD DestinationFileNameLength; 1715 DWORD Flags; 1716 WCHAR FileNameBuffer[1]; 1717 } SI_COPYFILE,*PSI_COPYFILE; 1718 1719 #define COPYFILE_SIS_LINK 0x0001 1720 #define COPYFILE_SIS_REPLACE 0x0002 1721 #define COPYFILE_SIS_FLAGS 0x0003 1722 1723 typedef struct _STORAGE_DESCRIPTOR_HEADER { 1724 DWORD Version; 1725 DWORD Size; 1726 } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER; 1727 1728 typedef enum _STORAGE_PROPERTY_ID { 1729 StorageDeviceProperty = 0, 1730 StorageAdapterProperty = 1, 1731 StorageDeviceIdProperty = 2, 1732 StorageDeviceUniqueIdProperty = 3, 1733 StorageDeviceWriteCacheProperty = 4, 1734 StorageMiniportProperty = 5, 1735 StorageAccessAlignmentProperty = 6, 1736 StorageDeviceSeekPenaltyProperty = 7, 1737 StorageDeviceTrimProperty = 8 1738 } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID; 1739 1740 typedef enum _STORAGE_QUERY_TYPE { 1741 PropertyStandardQuery = 0, 1742 PropertyExistsQuery = 1, 1743 PropertyMaskQuery = 2, 1744 PropertyQueryMaxDefined = 3 1745 } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE; 1746 1747 typedef struct _STORAGE_PROPERTY_QUERY { 1748 STORAGE_PROPERTY_ID PropertyId; 1749 STORAGE_QUERY_TYPE QueryType; 1750 BYTE AdditionalParameters[1]; 1751 } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; 1752 1753 typedef struct _STORAGE_DEVICE_DESCRIPTOR { 1754 DWORD Version; 1755 DWORD Size; 1756 BYTE DeviceType; 1757 BYTE DeviceTypeModifier; 1758 BOOLEAN RemovableMedia; 1759 BOOLEAN CommandQueueing; 1760 DWORD VendorIdOffset; 1761 DWORD ProductIdOffset; 1762 DWORD ProductRevisionOffset; 1763 DWORD SerialNumberOffset; 1764 STORAGE_BUS_TYPE BusType; 1765 DWORD RawPropertiesLength; 1766 BYTE RawDeviceProperties[1]; 1767 } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; 1768 1769 typedef struct _STORAGE_ADAPTER_DESCRIPTOR { 1770 DWORD Version; 1771 DWORD Size; 1772 DWORD MaximumTransferLength; 1773 DWORD MaximumPhysicalPages; 1774 DWORD AlignmentMask; 1775 BOOLEAN AdapterUsesPio; 1776 BOOLEAN AdapterScansDown; 1777 BOOLEAN CommandQueueing; 1778 BOOLEAN AcceleratedTransfer; 1779 BYTE BusType; 1780 WORD BusMajorVersion; 1781 WORD BusMinorVersion; 1782 } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR; 1783 1784 typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR { 1785 DWORD Version; 1786 DWORD Size; 1787 DWORD NumberOfIdentifiers; 1788 BYTE Identifiers[1]; 1789 } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR; 1790 1791 typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION { 1792 ULONGLONG GptAttributes; 1793 } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION; 1794 1795 #if (_WIN32_WINNT >= 0x0600) 1796 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA) 1797 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA) 1798 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS) 1799 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS) 1800 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 1801 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,81, METHOD_BUFFERED, FILE_WRITE_DATA) 1802 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,82, METHOD_BUFFERED, FILE_READ_DATA) 1803 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,84, METHOD_BUFFERED, FILE_WRITE_DATA) 1804 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,85, METHOD_BUFFERED, FILE_WRITE_DATA) 1805 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,86, METHOD_BUFFERED, FILE_WRITE_DATA) 1806 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA) 1807 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,88, METHOD_BUFFERED, FILE_READ_DATA) 1808 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,89, METHOD_BUFFERED, FILE_WRITE_DATA) 1809 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,90,METHOD_BUFFERED, FILE_WRITE_DATA) 1810 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,91, METHOD_BUFFERED, FILE_READ_DATA) 1811 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,92, METHOD_BUFFERED, FILE_READ_DATA) 1812 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,94, METHOD_BUFFERED, FILE_WRITE_DATA) 1813 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA) 1814 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,99, METHOD_BUFFERED, FILE_READ_DATA) 1815 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 1816 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS) 1817 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS) 1818 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS) 1819 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS) 1820 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS) 1821 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 1822 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS) 1823 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS) 1824 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA) 1825 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA) 1826 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS) 1827 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS) 1828 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS) 1829 1830 #define SET_REPAIR_ENABLED 0x00000001 1831 #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002 1832 #define SET_REPAIR_DELETE_CROSSLINK 0x00000004 1833 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008 1834 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010 1835 1836 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER { 1837 BOOLEAN CloseDisc; 1838 } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER; 1839 1840 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER { 1841 BOOLEAN Disable; 1842 } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER; 1843 1844 typedef struct _FILE_QUERY_SPARING_BUFFER { 1845 ULONG SparingUnitBytes; 1846 BOOLEAN SoftwareSparing; 1847 ULONG TotalSpareBlocks; 1848 ULONG FreeSpareBlocks; 1849 } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER; 1850 1851 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER { 1852 LARGE_INTEGER DirectoryCount; 1853 LARGE_INTEGER FileCount; 1854 WORD FsFormatMajVersion; 1855 WORD FsFormatMinVersion; 1856 WCHAR FsFormatName[12]; 1857 LARGE_INTEGER FormatTime; 1858 LARGE_INTEGER LastUpdateTime; 1859 WCHAR CopyrightInfo[34]; 1860 WCHAR AbstractInfo[34]; 1861 WCHAR FormattingImplementationInfo[34]; 1862 WCHAR LastModifyingImplementationInfo[34]; 1863 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER; 1864 1865 #define SET_REPAIR_ENABLED 0x00000001 1866 #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002 1867 #define SET_REPAIR_DELETE_CROSSLINK 0x00000004 1868 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008 1869 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010 1870 #define SET_REPAIR_VALID_MASK 0x0000001F 1871 1872 typedef enum _SHRINK_VOLUME_REQUEST_TYPES { 1873 ShrinkPrepare, 1874 ShrinkCommit, 1875 ShrinkAbort 1876 } SHRINK_VOLUME_REQUEST_TYPES; 1877 1878 typedef struct _SHRINK_VOLUME_INFORMATION { 1879 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType; 1880 DWORDLONG Flags; 1881 LONGLONG NewNumberOfSectors; 1882 } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION; 1883 1884 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001 1885 #define TXFS_RM_FLAG_RENAME_RM 0x00000002 1886 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004 1887 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008 1888 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010 1889 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020 1890 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040 1891 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080 1892 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100 1893 #define TXFS_RM_FLAG_GROW_LOG 0x00000400 1894 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800 1895 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000 1896 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000 1897 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000 1898 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000 1899 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000 1900 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000 1901 1902 #define TXFS_LOGGING_MODE_SIMPLE 1 1903 #define TXFS_LOGGING_MODE_FULL 2 1904 1905 #define TXFS_TRANSACTION_STATE_NONE 0 1906 #define TXFS_TRANSACTION_STATE_ACTIVE 1 1907 #define TXFS_TRANSACTION_STATE_PREPARED 2 1908 #define TXFS_TRANSACTION_STATE_NOTACTIVE 3 1909 1910 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \ 1911 TXFS_RM_FLAG_RENAME_RM | \ 1912 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 1913 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 1914 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 1915 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 1916 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 1917 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 1918 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 1919 TXFS_RM_FLAG_SHRINK_LOG | \ 1920 TXFS_RM_FLAG_GROW_LOG | \ 1921 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \ 1922 TXFS_RM_FLAG_PRESERVE_CHANGES | \ 1923 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 1924 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 1925 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 1926 TXFS_RM_FLAG_PREFER_AVAILABILITY) 1927 1928 typedef struct _TXFS_MODIFY_RM { 1929 ULONG Flags; 1930 ULONG LogContainerCountMax; 1931 ULONG LogContainerCountMin; 1932 ULONG LogContainerCount; 1933 ULONG LogGrowthIncrement; 1934 ULONG LogAutoShrinkPercentage; 1935 ULONGLONG Reserved; 1936 USHORT LoggingMode; 1937 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM; 1938 1939 #define TXFS_RM_STATE_NOT_STARTED 0 1940 #define TXFS_RM_STATE_STARTING 1 1941 #define TXFS_RM_STATE_ACTIVE 3 1942 #define TXFS_RM_STATE_SHUTTING_DOWN 4 1943 1944 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \ 1945 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 1946 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 1947 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 1948 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 1949 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 1950 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 1951 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 1952 TXFS_RM_FLAG_PREFER_AVAILABILITY) 1953 1954 typedef struct _TXFS_QUERY_RM_INFORMATION { 1955 ULONG BytesRequired; 1956 ULONGLONG TailLsn; 1957 ULONGLONG CurrentLsn; 1958 ULONGLONG ArchiveTailLsn; 1959 ULONGLONG LogContainerSize; 1960 LARGE_INTEGER HighestVirtualClock; 1961 ULONG LogContainerCount; 1962 ULONG LogContainerCountMax; 1963 ULONG LogContainerCountMin; 1964 ULONG LogGrowthIncrement; 1965 ULONG LogAutoShrinkPercentage; 1966 ULONG Flags; 1967 USHORT LoggingMode; 1968 USHORT Reserved; 1969 ULONG RmState; 1970 ULONGLONG LogCapacity; 1971 ULONGLONG LogFree; 1972 ULONGLONG TopsSize; 1973 ULONGLONG TopsUsed; 1974 ULONGLONG TransactionCount; 1975 ULONGLONG OnePCCount; 1976 ULONGLONG TwoPCCount; 1977 ULONGLONG NumberLogFileFull; 1978 ULONGLONG OldestTransactionAge; 1979 GUID RMName; 1980 ULONG TmLogPathOffset; 1981 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION; 1982 1983 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01 1984 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02 1985 1986 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \ 1987 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \ 1988 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK) 1989 1990 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION { 1991 LARGE_INTEGER LastVirtualClock; 1992 ULONGLONG LastRedoLsn; 1993 ULONGLONG HighestRecoveryLsn; 1994 ULONG Flags; 1995 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION; 1996 1997 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001 1998 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002 1999 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004 2000 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008 2001 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010 2002 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020 2003 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040 2004 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080 2005 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200 2006 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400 2007 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800 2008 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000 2009 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000 2010 2011 #define TXFS_START_RM_VALID_FLAGS \ 2012 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 2013 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 2014 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \ 2015 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 2016 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 2017 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 2018 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \ 2019 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 2020 TXFS_START_RM_FLAG_LOGGING_MODE | \ 2021 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \ 2022 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \ 2023 TXFS_START_RM_FLAG_PREFER_AVAILABILITY) 2024 2025 typedef struct _TXFS_START_RM_INFORMATION { 2026 ULONG Flags; 2027 ULONGLONG LogContainerSize; 2028 ULONG LogContainerCountMin; 2029 ULONG LogContainerCountMax; 2030 ULONG LogGrowthIncrement; 2031 ULONG LogAutoShrinkPercentage; 2032 ULONG TmLogPathOffset; 2033 USHORT TmLogPathLength; 2034 USHORT LoggingMode; 2035 USHORT LogPathLength; 2036 USHORT Reserved; 2037 WCHAR LogPath[1]; 2038 } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION; 2039 2040 typedef struct _TXFS_GET_METADATA_INFO_OUT { 2041 struct { 2042 LONGLONG LowPart; 2043 LONGLONG HighPart; 2044 } TxfFileId; 2045 GUID LockingTransaction; 2046 ULONGLONG LastLsn; 2047 ULONG TransactionState; 2048 } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT; 2049 2050 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001 2051 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x000000012 2052 2053 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY { 2054 ULONGLONG Offset; 2055 ULONG NameFlags; 2056 LONGLONG FileId; 2057 ULONG Reserved1; 2058 ULONG Reserved2; 2059 LONGLONG Reserved3; 2060 WCHAR FileName[1]; 2061 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY; 2062 2063 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES { 2064 GUID KtmTransaction; 2065 ULONGLONG NumberOfFiles; 2066 ULONGLONG BufferSizeRequired; 2067 ULONGLONG Offset; 2068 } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES; 2069 2070 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY { 2071 GUID TransactionId; 2072 ULONG TransactionState; 2073 ULONG Reserved1; 2074 ULONG Reserved2; 2075 LONGLONG Reserved3; 2076 } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY; 2077 2078 typedef struct _TXFS_LIST_TRANSACTIONS { 2079 ULONGLONG NumberOfTransactions; 2080 ULONGLONG BufferSizeRequired; 2081 } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS; 2082 2083 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT { 2084 __C89_NAMELESS union { 2085 ULONG BufferLength; 2086 UCHAR Buffer; 2087 } DUMMYUNIONNAME; 2088 } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT; 2089 2090 typedef struct _TXFS_WRITE_BACKUP_INFORMATION { 2091 UCHAR Buffer; 2092 } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION; 2093 2094 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE 2095 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF 2096 2097 typedef struct _TXFS_GET_TRANSACTED_VERSION { 2098 ULONG ThisBaseVersion; 2099 ULONG LatestVersion; 2100 USHORT ThisMiniVersion; 2101 USHORT FirstMiniVersion; 2102 USHORT LatestMiniVersion; 2103 } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION; 2104 2105 #define TXFS_SAVEPOINT_SET 1 2106 #define TXFS_SAVEPOINT_ROLLBACK 2 2107 #define TXFS_SAVEPOINT_CLEAR 4 2108 #define TXFS_SAVEPOINT_CLEAR_ALL 16 2109 2110 typedef struct _TXFS_SAVEPOINT_INFORMATION { 2111 HANDLE KtmTransaction; 2112 ULONG ActionCode; 2113 ULONG SavepointId; 2114 } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION; 2115 2116 typedef struct _TXFS_CREATE_MINIVERSION_INFO { 2117 USHORT StructureVersion; 2118 USHORT StructureLength; 2119 ULONG BaseVersion; 2120 USHORT MiniVersion; 2121 } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO; 2122 2123 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO { 2124 WINBOOL TransactionsActiveAtSnapshot; 2125 } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO; 2126 2127 typedef enum _WRITE_CACHE_TYPE { 2128 WriteCacheTypeUnknown = 0, 2129 WriteCacheTypeNone = 1, 2130 WriteCacheTypeWriteBack = 2, 2131 WriteCacheTypeWriteThrough = 3 2132 } WRITE_CACHE_TYPE; 2133 2134 typedef enum _WRITE_CACHE_ENABLE { 2135 WriteCacheEnableUnknown = 0, 2136 WriteCacheDisabled = 1, 2137 WriteCacheEnabled = 2 2138 } WRITE_CACHE_ENABLE; 2139 2140 typedef enum _WRITE_CACHE_CHANGE { 2141 WriteCacheChangeUnknown = 0, 2142 WriteCacheNotChangeable = 1, 2143 WriteCacheChangeable = 2 2144 } WRITE_CACHE_CHANGE; 2145 2146 typedef enum _WRITE_THROUGH { 2147 WriteThroughUnknown = 0, 2148 WriteThroughNotSupported = 1, 2149 WriteThroughSupported = 2 2150 } WRITE_THROUGH; 2151 2152 typedef struct _STORAGE_WRITE_CACHE_PROPERTY { 2153 DWORD Version; 2154 DWORD Size; 2155 WRITE_CACHE_TYPE WriteCacheType; 2156 WRITE_CACHE_ENABLE WriteCacheEnabled; 2157 WRITE_CACHE_CHANGE WriteCacheChangeable; 2158 WRITE_THROUGH WriteThroughSupported; 2159 BOOLEAN FlushCacheSupported; 2160 BOOLEAN UserDefinedPowerProtection; 2161 BOOLEAN NVCacheEnabled; 2162 } STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY; 2163 2164 typedef enum _STORAGE_PORT_CODE_SET { 2165 StoragePortCodeSetReserved = 0, 2166 StoragePortCodeSetStorport = 1, 2167 StoragePortCodeSetSCSIport = 2 2168 } STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET; 2169 2170 typedef struct _STORAGE_MINIPORT_DESCRIPTOR { 2171 DWORD Version; 2172 DWORD Size; 2173 STORAGE_PORT_CODE_SET Portdriver; 2174 BOOLEAN LUNResetSupported; 2175 BOOLEAN TargetResetSupported; 2176 } STORAGE_MINIPORT_DESCRIPTOR, *PSTORAGE_MINIPORT_DESCRIPTOR; 2177 2178 typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR { 2179 DWORD Version; 2180 DWORD Size; 2181 DWORD BytesPerCacheLine; 2182 DWORD BytesOffsetForCacheAlignment; 2183 DWORD BytesPerLogicalSector; 2184 DWORD BytesPerPhysicalSector; 2185 DWORD BytesOffsetForSectorAlignment; 2186 } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR; 2187 #endif /*(_WIN32_WINNT >= 0x0600)*/ 2188 2189 #if (_WIN32_WINNT >= 0x0601) 2190 typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR { 2191 DWORD Version; 2192 DWORD Size; 2193 BOOLEAN IncursSeekPenalty; 2194 } DEVICE_SEEK_PENALTY_DESCRIPTOR, *PDEVICE_SEEK_PENALTY_DESCRIPTOR; 2195 2196 typedef struct _DEVICE_TRIM_DESCRIPTOR { 2197 DWORD Version; 2198 DWORD Size; 2199 BOOLEAN TrimEnabled; 2200 } DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR; 2201 2202 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER { 2203 WORD StructureVersion; 2204 WORD StructureLength; 2205 DWORD RequestedOplockLevel; 2206 DWORD Flags; 2207 } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER; 2208 2209 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER { 2210 WORD StructureVersion; 2211 WORD StructureLength; 2212 DWORD OriginalOplockLevel; 2213 DWORD NewOplockLevel; 2214 DWORD Flags; 2215 ACCESS_MASK AccessMode; 2216 WORD ShareMode; 2217 } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER; 2218 2219 typedef struct _BOOT_AREA_INFO { 2220 ULONG BootSectorCount; 2221 struct { 2222 LARGE_INTEGER Offset; 2223 } BootSectors[2]; 2224 } BOOT_AREA_INFO, *PBOOT_AREA_INFO; 2225 2226 typedef struct _RETRIEVAL_POINTER_BASE { 2227 LARGE_INTEGER FileAreaOffset; 2228 } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE; 2229 2230 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION { 2231 CHAR FileSystem[9]; 2232 } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION; 2233 2234 typedef struct _FILE_SYSTEM_RECOGNITION_STRUCTURE { 2235 UCHAR Jmp[3]; 2236 UCHAR FsName[8]; 2237 UCHAR MustBeZero[5]; 2238 ULONG Identifier; 2239 USHORT Length; 2240 USHORT Checksum; 2241 } FILE_SYSTEM_RECOGNITION_STRUCTURE; 2242 2243 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT { 2244 DWORD Flags; 2245 DWORD NumberOfClusters; 2246 LARGE_INTEGER Cluster[1]; 2247 } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT; 2248 2249 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT { 2250 DWORD Offset; 2251 DWORD NumberOfMatches; 2252 DWORD BufferSizeRequired; 2253 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT; 2254 2255 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY { 2256 DWORD OffsetToNext; 2257 DWORD Flags; 2258 LARGE_INTEGER Reserved; 2259 LARGE_INTEGER Cluster; 2260 WCHAR FileName[1]; 2261 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY; 2262 2263 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000 2264 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001 2265 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002 2266 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004 2267 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008 2268 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000 2269 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000 2270 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000 2271 2272 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,124, METHOD_BUFFERED, FILE_ANY_ACCESS) 2273 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,125, METHOD_BUFFERED, FILE_ANY_ACCESS) 2274 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM,127, METHOD_BUFFERED, FILE_ANY_ACCESS) 2275 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,128, METHOD_BUFFERED, FILE_ANY_ACCESS) 2276 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,129, METHOD_BUFFERED, FILE_ANY_ACCESS) 2277 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,140, METHOD_BUFFERED, FILE_ANY_ACCESS) 2278 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,141, METHOD_BUFFERED, FILE_ANY_ACCESS) 2279 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS) 2280 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS) 2281 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,144,METHOD_BUFFERED,FILE_ANY_ACCESS) 2282 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS) 2283 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS) 2284 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,147, METHOD_BUFFERED, FILE_ANY_ACCESS) 2285 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,148, METHOD_BUFFERED, FILE_ANY_ACCESS) 2286 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS) 2287 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS) 2288 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS) 2289 2290 #endif /*(_WIN32_WINNT >= 0x0601)*/ 2291 2292 #endif /* _FILESYSTEMFSCTL_ */ 2293 2294 2295 #define IOCTL_VOLUME_BASE ((DWORD) 'V') 2296 2297 #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS CTL_CODE(IOCTL_VOLUME_BASE,0,METHOD_BUFFERED,FILE_ANY_ACCESS) 2298 #define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,1,METHOD_BUFFERED,FILE_ANY_ACCESS) 2299 #define IOCTL_VOLUME_ONLINE CTL_CODE(IOCTL_VOLUME_BASE,2,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 2300 #define IOCTL_VOLUME_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) 2301 #define IOCTL_VOLUME_IS_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,4,METHOD_BUFFERED, FILE_ANY_ACCESS) 2302 #define IOCTL_VOLUME_IS_IO_CAPABLE CTL_CODE(IOCTL_VOLUME_BASE,5,METHOD_BUFFERED,FILE_ANY_ACCESS) 2303 #define IOCTL_VOLUME_QUERY_FAILOVER_SET CTL_CODE(IOCTL_VOLUME_BASE,6,METHOD_BUFFERED,FILE_ANY_ACCESS) 2304 #define IOCTL_VOLUME_QUERY_VOLUME_NUMBER CTL_CODE(IOCTL_VOLUME_BASE,7,METHOD_BUFFERED,FILE_ANY_ACCESS) 2305 #define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL CTL_CODE(IOCTL_VOLUME_BASE,8,METHOD_BUFFERED,FILE_ANY_ACCESS) 2306 #define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL CTL_CODE(IOCTL_VOLUME_BASE,9,METHOD_BUFFERED,FILE_ANY_ACCESS) 2307 #define IOCTL_VOLUME_IS_CLUSTERED CTL_CODE(IOCTL_VOLUME_BASE,12,METHOD_BUFFERED,FILE_ANY_ACCESS) 2308 #define IOCTL_VOLUME_GET_GPT_ATTRIBUTES CTL_CODE(IOCTL_VOLUME_BASE,14,METHOD_BUFFERED,FILE_ANY_ACCESS) 2309 2310 typedef struct _DISK_EXTENT { 2311 DWORD DiskNumber; 2312 LARGE_INTEGER StartingOffset; 2313 LARGE_INTEGER ExtentLength; 2314 } DISK_EXTENT,*PDISK_EXTENT; 2315 2316 typedef struct _VOLUME_DISK_EXTENTS { 2317 DWORD NumberOfDiskExtents; 2318 DISK_EXTENT Extents[1]; 2319 } VOLUME_DISK_EXTENTS,*PVOLUME_DISK_EXTENTS; 2320 2321 #endif /* _WINIOCTL_ */ 2322 2323