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