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