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