|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
|  | */ | 
|  | #ifdef DEFINE_GUID | 
|  |  | 
|  | #ifndef FAR | 
|  | #define FAR | 
|  | #endif | 
|  |  | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_DISK,0x53f56307,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_CDROM,0x53f56308,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,0x53f5630a,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_TAPE,0x53f5630b,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,0x53f5630c,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,0x53f5630d,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,0x53f56310,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,0x53f56311,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,0x53f56312,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,0x2accfe60,0xc130,0x11d2,0xb0,0x82,0x00,0xa0,0xc9,0x1e,0xfb,0x8b); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_COMPORT,0x86e0d1e0,0x8089,0x11d0,0x9c,0xe4,0x08,0x00,0x3e,0x30,0x1f,0x73); | 
|  | DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,0x4D36E978,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18); | 
|  |  | 
|  | #define DiskClassGuid GUID_DEVINTERFACE_DISK | 
|  | #define CdRomClassGuid GUID_DEVINTERFACE_CDROM | 
|  | #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION | 
|  | #define TapeClassGuid GUID_DEVINTERFACE_TAPE | 
|  | #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK | 
|  | #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME | 
|  | #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER | 
|  | #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY | 
|  | #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER | 
|  | #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT | 
|  | #define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT | 
|  | #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR | 
|  | #endif /* DEFINE_GUID */ | 
|  |  | 
|  | #ifndef _WINIOCTL_ | 
|  | #define _WINIOCTL_ | 
|  |  | 
|  | #ifndef _DEVIOCTL_ | 
|  | #define _DEVIOCTL_ | 
|  |  | 
|  | #ifndef DEVICE_TYPE | 
|  | #define DEVICE_TYPE DWORD | 
|  | #endif | 
|  |  | 
|  | #define FILE_DEVICE_BEEP 0x00000001 | 
|  | #define FILE_DEVICE_CD_ROM 0x00000002 | 
|  | #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 | 
|  | #define FILE_DEVICE_CONTROLLER 0x00000004 | 
|  | #define FILE_DEVICE_DATALINK 0x00000005 | 
|  | #define FILE_DEVICE_DFS 0x00000006 | 
|  | #define FILE_DEVICE_DISK 0x00000007 | 
|  | #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 | 
|  | #define FILE_DEVICE_FILE_SYSTEM 0x00000009 | 
|  | #define FILE_DEVICE_INPORT_PORT 0x0000000a | 
|  | #define FILE_DEVICE_KEYBOARD 0x0000000b | 
|  | #define FILE_DEVICE_MAILSLOT 0x0000000c | 
|  | #define FILE_DEVICE_MIDI_IN 0x0000000d | 
|  | #define FILE_DEVICE_MIDI_OUT 0x0000000e | 
|  | #define FILE_DEVICE_MOUSE 0x0000000f | 
|  | #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 | 
|  | #define FILE_DEVICE_NAMED_PIPE 0x00000011 | 
|  | #define FILE_DEVICE_NETWORK 0x00000012 | 
|  | #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 | 
|  | #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 | 
|  | #define FILE_DEVICE_NULL 0x00000015 | 
|  | #define FILE_DEVICE_PARALLEL_PORT 0x00000016 | 
|  | #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 | 
|  | #define FILE_DEVICE_PRINTER 0x00000018 | 
|  | #define FILE_DEVICE_SCANNER 0x00000019 | 
|  | #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a | 
|  | #define FILE_DEVICE_SERIAL_PORT 0x0000001b | 
|  | #define FILE_DEVICE_SCREEN 0x0000001c | 
|  | #define FILE_DEVICE_SOUND 0x0000001d | 
|  | #define FILE_DEVICE_STREAMS 0x0000001e | 
|  | #define FILE_DEVICE_TAPE 0x0000001f | 
|  | #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 | 
|  | #define FILE_DEVICE_TRANSPORT 0x00000021 | 
|  | #define FILE_DEVICE_UNKNOWN 0x00000022 | 
|  | #define FILE_DEVICE_VIDEO 0x00000023 | 
|  | #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 | 
|  | #define FILE_DEVICE_WAVE_IN 0x00000025 | 
|  | #define FILE_DEVICE_WAVE_OUT 0x00000026 | 
|  | #define FILE_DEVICE_8042_PORT 0x00000027 | 
|  | #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 | 
|  | #define FILE_DEVICE_BATTERY 0x00000029 | 
|  | #define FILE_DEVICE_BUS_EXTENDER 0x0000002a | 
|  | #define FILE_DEVICE_MODEM 0x0000002b | 
|  | #define FILE_DEVICE_VDM 0x0000002c | 
|  | #define FILE_DEVICE_MASS_STORAGE 0x0000002d | 
|  | #define FILE_DEVICE_SMB 0x0000002e | 
|  | #define FILE_DEVICE_KS 0x0000002f | 
|  | #define FILE_DEVICE_CHANGER 0x00000030 | 
|  | #define FILE_DEVICE_SMARTCARD 0x00000031 | 
|  | #define FILE_DEVICE_ACPI 0x00000032 | 
|  | #define FILE_DEVICE_DVD 0x00000033 | 
|  | #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 | 
|  | #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 | 
|  | #define FILE_DEVICE_DFS_VOLUME 0x00000036 | 
|  | #define FILE_DEVICE_SERENUM 0x00000037 | 
|  | #define FILE_DEVICE_TERMSRV 0x00000038 | 
|  | #define FILE_DEVICE_KSEC 0x00000039 | 
|  | #define FILE_DEVICE_FIPS 0x0000003A | 
|  | #define FILE_DEVICE_INFINIBAND 0x0000003B | 
|  | #define FILE_DEVICE_VMBUS 0x0000003E | 
|  | #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F | 
|  | #define FILE_DEVICE_WPD 0x00000040 | 
|  | #define FILE_DEVICE_BLUETOOTH 0x00000041 | 
|  | #define FILE_DEVICE_MT_COMPOSITE 0x00000042 | 
|  | #define FILE_DEVICE_MT_TRANSPORT 0x00000043 | 
|  | #define FILE_DEVICE_BIOMETRIC 0x00000044 | 
|  | #define FILE_DEVICE_PMI 0x00000045 | 
|  | #define FILE_DEVICE_EHSTOR 0x00000046 | 
|  | #define FILE_DEVICE_DEVAPI 0x00000047 | 
|  | #define FILE_DEVICE_GPIO 0x00000048 | 
|  | #define FILE_DEVICE_USBEX 0x00000049 | 
|  | #define FILE_DEVICE_CONSOLE 0x00000050 | 
|  | #define FILE_DEVICE_NFP 0x00000051 | 
|  | #define FILE_DEVICE_SYSENV 0x00000052 | 
|  | #define FILE_DEVICE_VIRTUAL_BLOCK 0x00000053 | 
|  | #define FILE_DEVICE_POINT_OF_SERVICE 0x00000054 | 
|  | #define FILE_DEVICE_STORAGE_REPLICATION 0x00000055 | 
|  | #define FILE_DEVICE_TRUST_ENV 0x00000056 | 
|  | #define FILE_DEVICE_UCM 0x00000057 | 
|  | #define FILE_DEVICE_UCMTCPCI 0x00000058 | 
|  | #define FILE_DEVICE_PERSISTENT_MEMORY 0x00000059 | 
|  | #define FILE_DEVICE_NVDIMM 0x0000005a | 
|  | #define FILE_DEVICE_HOLOGRAPHIC 0x0000005b | 
|  | #define FILE_DEVICE_SDFXHCI 0x0000005c | 
|  | #define FILE_DEVICE_UCMUCSI 0x0000005d | 
|  |  | 
|  | #define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) | 
|  |  | 
|  | #define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((DWORD)(ctrlCode & 0xffff0000)) >> 16) | 
|  |  | 
|  | #define METHOD_BUFFERED 0 | 
|  | #define METHOD_IN_DIRECT 1 | 
|  | #define METHOD_OUT_DIRECT 2 | 
|  | #define METHOD_NEITHER 3 | 
|  |  | 
|  | #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT | 
|  | #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT | 
|  |  | 
|  | #define FILE_ANY_ACCESS 0 | 
|  | #define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS) | 
|  | #define FILE_READ_ACCESS (0x0001) | 
|  | #define FILE_WRITE_ACCESS (0x0002) | 
|  |  | 
|  | #endif /* _DEVIOCTL_ */ | 
|  |  | 
|  |  | 
|  | #ifndef _NTDDSTOR_H_ | 
|  | #define _NTDDSTOR_H_ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE | 
|  |  | 
|  | #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  |  | 
|  | #define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0250,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0251,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE,0x0301,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0304,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0305,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0306,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  |  | 
|  | #define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE,0x0405,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  |  | 
|  | #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0420,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE,0x0440,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_READ_CAPACITY CTL_CODE(IOCTL_STORAGE_BASE,0x0450,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  |  | 
|  | #define OBSOLETE_IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  |  | 
|  | typedef struct _STORAGE_READ_CAPACITY { | 
|  | ULONG Version; | 
|  | ULONG Size; | 
|  | ULONG BlockLength; | 
|  | LARGE_INTEGER NumberOfBlocks; | 
|  | LARGE_INTEGER DiskLength; | 
|  | } STORAGE_READ_CAPACITY, *PSTORAGE_READ_CAPACITY; | 
|  |  | 
|  | #if (_WIN32_WINNT >= 0x0601) | 
|  | #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS) | 
|  | #define DeviceDsmActionFlag_NonDestructive 0x80000000 | 
|  | #define DeviceDsmAction_None 0 | 
|  | #define DeviceDsmAction_Trim 1 | 
|  | #define DeviceDsmAction_Notification (2 | DeviceDsmActionFlag_NonDestructive) | 
|  |  | 
|  | #define IsDsmActionNonDestructive(x) ((BOOLEAN)(!!((x) & DeviceDsmActionFlag_NonDestructive))) | 
|  |  | 
|  | #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE __MSABI_LONG(0x00000001) | 
|  |  | 
|  | typedef DWORD DEVICE_DATA_MANAGEMENT_SET_ACTION; | 
|  | typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES { | 
|  | DWORD                             Size; | 
|  | DEVICE_DATA_MANAGEMENT_SET_ACTION Action; | 
|  | DWORD                             Flags; | 
|  | DWORD                             ParameterBlockOffset; | 
|  | DWORD                             ParameterBlockLength; | 
|  | DWORD                             DataSetRangesOffset; | 
|  | DWORD                             DataSetRangesLength; | 
|  | } DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES; | 
|  |  | 
|  | typedef struct _DEVICE_DATA_SET_RANGE { | 
|  | LONGLONG  StartingOffset; | 
|  | DWORDLONG LengthInBytes; | 
|  | } DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE; | 
|  |  | 
|  | #endif /*(_WIN32_WINNT >= 0x0601)*/ | 
|  |  | 
|  | typedef struct _STORAGE_HOTPLUG_INFO { | 
|  | DWORD Size; | 
|  | BOOLEAN MediaRemovable; | 
|  | BOOLEAN MediaHotplug; | 
|  | BOOLEAN DeviceHotplug; | 
|  | BOOLEAN WriteCacheEnableOverride; | 
|  | } STORAGE_HOTPLUG_INFO,*PSTORAGE_HOTPLUG_INFO; | 
|  |  | 
|  | typedef struct _STORAGE_DEVICE_NUMBER { | 
|  | DEVICE_TYPE DeviceType; | 
|  | DWORD DeviceNumber; | 
|  | DWORD PartitionNumber; | 
|  | } STORAGE_DEVICE_NUMBER,*PSTORAGE_DEVICE_NUMBER; | 
|  |  | 
|  | typedef struct _STORAGE_BUS_RESET_REQUEST { | 
|  | BYTE PathId; | 
|  | } STORAGE_BUS_RESET_REQUEST,*PSTORAGE_BUS_RESET_REQUEST; | 
|  |  | 
|  | typedef struct STORAGE_BREAK_RESERVATION_REQUEST { | 
|  | DWORD Length; | 
|  | BYTE _unused; | 
|  | BYTE PathId; | 
|  | BYTE TargetId; | 
|  | BYTE Lun; | 
|  | } STORAGE_BREAK_RESERVATION_REQUEST,*PSTORAGE_BREAK_RESERVATION_REQUEST; | 
|  |  | 
|  | typedef struct _PREVENT_MEDIA_REMOVAL { | 
|  | BOOLEAN PreventMediaRemoval; | 
|  | } PREVENT_MEDIA_REMOVAL,*PPREVENT_MEDIA_REMOVAL; | 
|  |  | 
|  | typedef struct _CLASS_MEDIA_CHANGE_CONTEXT { | 
|  | DWORD MediaChangeCount; | 
|  | DWORD NewState; | 
|  | } CLASS_MEDIA_CHANGE_CONTEXT,*PCLASS_MEDIA_CHANGE_CONTEXT; | 
|  |  | 
|  | typedef struct _TAPE_STATISTICS { | 
|  | DWORD Version; | 
|  | DWORD Flags; | 
|  | LARGE_INTEGER RecoveredWrites; | 
|  | LARGE_INTEGER UnrecoveredWrites; | 
|  | LARGE_INTEGER RecoveredReads; | 
|  | LARGE_INTEGER UnrecoveredReads; | 
|  | BYTE CompressionRatioReads; | 
|  | BYTE CompressionRatioWrites; | 
|  | } TAPE_STATISTICS,*PTAPE_STATISTICS; | 
|  |  | 
|  | #define RECOVERED_WRITES_VALID 0x00000001 | 
|  | #define UNRECOVERED_WRITES_VALID 0x00000002 | 
|  | #define RECOVERED_READS_VALID 0x00000004 | 
|  | #define UNRECOVERED_READS_VALID 0x00000008 | 
|  | #define WRITE_COMPRESSION_INFO_VALID 0x00000010 | 
|  | #define READ_COMPRESSION_INFO_VALID 0x00000020 | 
|  |  | 
|  | typedef struct _TAPE_GET_STATISTICS { | 
|  | DWORD Operation; | 
|  | } TAPE_GET_STATISTICS,*PTAPE_GET_STATISTICS; | 
|  |  | 
|  | #define TAPE_RETURN_STATISTICS __MSABI_LONG(0) | 
|  | #define TAPE_RETURN_ENV_INFO __MSABI_LONG(1) | 
|  | #define TAPE_RESET_STATISTICS __MSABI_LONG(2) | 
|  |  | 
|  | typedef enum _STORAGE_MEDIA_TYPE { | 
|  | DDS_4mm	= 0x20, | 
|  | MiniQic, | 
|  | Travan, | 
|  | QIC, | 
|  | MP_8mm, | 
|  | AME_8mm, | 
|  | AIT1_8mm, | 
|  | DLT, | 
|  | NCTP, | 
|  | IBM_3480, | 
|  | IBM_3490E, | 
|  | IBM_Magstar_3590, | 
|  | IBM_Magstar_MP, | 
|  | STK_DATA_D3, | 
|  | SONY_DTF, | 
|  | DV_6mm, | 
|  | DMI, | 
|  | SONY_D2, | 
|  | CLEANER_CARTRIDGE, | 
|  | CD_ROM, | 
|  | CD_R, | 
|  | CD_RW, | 
|  | DVD_ROM, | 
|  | DVD_R, | 
|  | DVD_RW, | 
|  | MO_3_RW, | 
|  | MO_5_WO, | 
|  | MO_5_RW, | 
|  | MO_5_LIMDOW, | 
|  | PC_5_WO, | 
|  | PC_5_RW, | 
|  | PD_5_RW, | 
|  | ABL_5_WO, | 
|  | PINNACLE_APEX_5_RW, | 
|  | SONY_12_WO, | 
|  | PHILIPS_12_WO, | 
|  | HITACHI_12_WO, | 
|  | CYGNET_12_WO, | 
|  | KODAK_14_WO, | 
|  | MO_NFR_525, | 
|  | NIKON_12_RW, | 
|  | IOMEGA_ZIP, | 
|  | IOMEGA_JAZ, | 
|  | SYQUEST_EZ135, | 
|  | SYQUEST_EZFLYER, | 
|  | SYQUEST_SYJET, | 
|  | AVATAR_F2, | 
|  | MP2_8mm, | 
|  | DST_S, | 
|  | DST_M, | 
|  | DST_L, | 
|  | VXATape_1, | 
|  | VXATape_2, | 
|  | STK_9840, | 
|  | LTO_Ultrium, | 
|  | LTO_Accelis, | 
|  | DVD_RAM, | 
|  | AIT_8mm, | 
|  | ADR_1, | 
|  | ADR_2, | 
|  | STK_9940, | 
|  | SAIT, | 
|  | VXATape | 
|  | } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE; | 
|  |  | 
|  | #define MEDIA_ERASEABLE 0x00000001 | 
|  | #define MEDIA_WRITE_ONCE 0x00000002 | 
|  | #define MEDIA_READ_ONLY 0x00000004 | 
|  | #define MEDIA_READ_WRITE 0x00000008 | 
|  |  | 
|  | #define MEDIA_WRITE_PROTECTED 0x00000100 | 
|  | #define MEDIA_CURRENTLY_MOUNTED 0x80000000 | 
|  |  | 
|  | typedef enum _STORAGE_BUS_TYPE { | 
|  | BusTypeUnknown             = 0x00, | 
|  | BusTypeScsi                = 0x1, | 
|  | BusTypeAtapi               = 0x2, | 
|  | BusTypeAta                 = 0x3, | 
|  | BusType1394                = 0x4, | 
|  | BusTypeSsa                 = 0x5, | 
|  | BusTypeFibre               = 0x6, | 
|  | BusTypeUsb                 = 0x7, | 
|  | BusTypeRAID                = 0x8, | 
|  | #if (_WIN32_WINNT >= 0x0600) | 
|  | BusTypeiScsi               = 0x9, | 
|  | BusTypeSas                 = 0xA, | 
|  | BusTypeSata                = 0xB, | 
|  | BusTypeSd                  = 0xC, | 
|  | BusTypeMmc                 = 0xD, | 
|  | #endif /*(_WIN32_WINNT >= 0x0600)*/ | 
|  | #if (_WIN32_WINNT >= 0x0601) | 
|  | BusTypeVirtual             = 0xE, | 
|  | BusTypeFileBackedVirtual   = 0xF, | 
|  | #endif /*(_WIN32_WINNT >= 0x0601)*/ | 
|  | BusTypeMax, | 
|  | BusTypeMaxReserved         = 0x7F | 
|  | } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; | 
|  |  | 
|  | typedef struct _DEVICE_MEDIA_INFO { | 
|  | union { | 
|  | struct { | 
|  | LARGE_INTEGER Cylinders; | 
|  | STORAGE_MEDIA_TYPE MediaType; | 
|  | DWORD TracksPerCylinder; | 
|  | DWORD SectorsPerTrack; | 
|  | DWORD BytesPerSector; | 
|  | DWORD NumberMediaSides; | 
|  | DWORD MediaCharacteristics; | 
|  | } DiskInfo; | 
|  | struct { | 
|  | LARGE_INTEGER Cylinders; | 
|  | STORAGE_MEDIA_TYPE MediaType; | 
|  | DWORD TracksPerCylinder; | 
|  | DWORD SectorsPerTrack; | 
|  | DWORD BytesPerSector; | 
|  | DWORD NumberMediaSides; | 
|  | DWORD MediaCharacteristics; | 
|  | } RemovableDiskInfo; | 
|  | struct { | 
|  | STORAGE_MEDIA_TYPE MediaType; | 
|  | DWORD MediaCharacteristics; | 
|  | DWORD CurrentBlockSize; | 
|  | STORAGE_BUS_TYPE BusType; | 
|  | union { | 
|  | struct { | 
|  | BYTE MediumType; | 
|  | BYTE DensityCode; | 
|  | } ScsiInformation; | 
|  | } BusSpecificData; | 
|  | } TapeInfo; | 
|  | } DeviceSpecific; | 
|  | } DEVICE_MEDIA_INFO,*PDEVICE_MEDIA_INFO; | 
|  |  | 
|  | typedef struct _GET_MEDIA_TYPES { | 
|  | DWORD DeviceType; | 
|  | DWORD MediaInfoCount; | 
|  | DEVICE_MEDIA_INFO MediaInfo[1]; | 
|  | } GET_MEDIA_TYPES,*PGET_MEDIA_TYPES; | 
|  |  | 
|  | typedef struct _STORAGE_PREDICT_FAILURE { | 
|  | DWORD PredictFailure; | 
|  | BYTE VendorSpecific[512]; | 
|  | } STORAGE_PREDICT_FAILURE,*PSTORAGE_PREDICT_FAILURE; | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  | #endif /* _NTDDSTOR_H_ */ | 
|  |  | 
|  |  | 
|  | #ifndef _NTDDDISK_H_ | 
|  | #define _NTDDDISK_H_ | 
|  |  | 
|  | #define IOCTL_DISK_BASE FILE_DEVICE_DISK | 
|  | #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE,0x0000,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0003,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0005,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE,0x0008,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE,0x0009,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE,0x000a,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE,0x000b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000c,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE,0x000d,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE,0x000e,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000f,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE,0x0010,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_PERFORMANCE_OFF CTL_CODE(IOCTL_DISK_BASE,0x0018,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE,0x0011,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE,0x0020,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE,0x0021,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE,0x0022,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  |  | 
|  | #define IOCTL_DISK_GET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0012,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_SET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0013,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0014,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0015,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_CREATE_DISK CTL_CODE(IOCTL_DISK_BASE,0x0016,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(IOCTL_DISK_BASE,0x0017,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE,0x0028,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | #define IOCTL_DISK_REASSIGN_BLOCKS_EX CTL_CODE(IOCTL_DISK_BASE,0x0029,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_UPDATE_DRIVE_SIZE CTL_CODE(IOCTL_DISK_BASE,0x0032,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_GROW_PARTITION CTL_CODE(IOCTL_DISK_BASE,0x0034,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_GET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0035,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_SET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0036,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define OBSOLETE_DISK_GET_WRITE_CACHE_STATE CTL_CODE(IOCTL_DISK_BASE,0x0037,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_DELETE_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0040,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_UPDATE_PROPERTIES CTL_CODE(IOCTL_DISK_BASE,0x0050,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_RESET_SNAPSHOT_INFO CTL_CODE(IOCTL_DISK_BASE,0x0084,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_FORMAT_DRIVE CTL_CODE(IOCTL_DISK_BASE,0x00f3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_DISK_SENSE_DEVICE CTL_CODE(IOCTL_DISK_BASE,0x00f8,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  |  | 
|  | #define PARTITION_ENTRY_UNUSED 0x00 | 
|  | #define PARTITION_FAT_12 0x01 | 
|  | #define PARTITION_XENIX_1 0x02 | 
|  | #define PARTITION_XENIX_2 0x03 | 
|  | #define PARTITION_FAT_16 0x04 | 
|  | #define PARTITION_EXTENDED 0x05 | 
|  | #define PARTITION_HUGE 0x06 | 
|  | #define PARTITION_IFS 0x07 | 
|  | #define PARTITION_OS2BOOTMGR 0x0A | 
|  | #define PARTITION_FAT32 0x0B | 
|  | #define PARTITION_FAT32_XINT13 0x0C | 
|  | #define PARTITION_XINT13 0x0E | 
|  | #define PARTITION_XINT13_EXTENDED 0x0F | 
|  | #define PARTITION_PREP 0x41 | 
|  | #define PARTITION_LDM 0x42 | 
|  | #define PARTITION_UNIX 0x63 | 
|  |  | 
|  | #define VALID_NTFT 0xC0 | 
|  |  | 
|  | #define PARTITION_NTFT 0x80 | 
|  |  | 
|  | #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)) | 
|  | #define IsContainerPartition(PartitionType) ((PartitionType==PARTITION_EXTENDED) || (PartitionType==PARTITION_XINT13_EXTENDED)) | 
|  | #define IsFTPartition(PartitionType) (((PartitionType)&PARTITION_NTFT) && IsRecognizedPartition(PartitionType)) | 
|  |  | 
|  | typedef enum _MEDIA_TYPE { | 
|  | 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, | 
|  | 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, | 
|  | F3_230Mb_512,F8_256_128,F3_200Mb_512,F3_240M_512,F3_32M_512 | 
|  | } MEDIA_TYPE,*PMEDIA_TYPE; | 
|  |  | 
|  | typedef struct _FORMAT_PARAMETERS { | 
|  | MEDIA_TYPE MediaType; | 
|  | DWORD StartCylinderNumber; | 
|  | DWORD EndCylinderNumber; | 
|  | DWORD StartHeadNumber; | 
|  | DWORD EndHeadNumber; | 
|  | } FORMAT_PARAMETERS,*PFORMAT_PARAMETERS; | 
|  |  | 
|  | typedef WORD BAD_TRACK_NUMBER; | 
|  | typedef WORD *PBAD_TRACK_NUMBER; | 
|  |  | 
|  | typedef struct _FORMAT_EX_PARAMETERS { | 
|  | MEDIA_TYPE MediaType; | 
|  | DWORD StartCylinderNumber; | 
|  | DWORD EndCylinderNumber; | 
|  | DWORD StartHeadNumber; | 
|  | DWORD EndHeadNumber; | 
|  | WORD FormatGapLength; | 
|  | WORD SectorsPerTrack; | 
|  | WORD SectorNumber[1]; | 
|  | } FORMAT_EX_PARAMETERS,*PFORMAT_EX_PARAMETERS; | 
|  |  | 
|  | typedef struct _DISK_GEOMETRY { | 
|  | LARGE_INTEGER Cylinders; | 
|  | MEDIA_TYPE MediaType; | 
|  | DWORD TracksPerCylinder; | 
|  | DWORD SectorsPerTrack; | 
|  | DWORD BytesPerSector; | 
|  | } DISK_GEOMETRY,*PDISK_GEOMETRY; | 
|  |  | 
|  | #define WMI_DISK_GEOMETRY_GUID { 0x25007f51,0x57c2,0x11d1,{ 0xa5,0x28,0x0,0xa0,0xc9,0x6,0x29,0x10 } } | 
|  |  | 
|  | typedef struct _PARTITION_INFORMATION { | 
|  | LARGE_INTEGER StartingOffset; | 
|  | LARGE_INTEGER PartitionLength; | 
|  | DWORD HiddenSectors; | 
|  | DWORD PartitionNumber; | 
|  | BYTE PartitionType; | 
|  | BOOLEAN BootIndicator; | 
|  | BOOLEAN RecognizedPartition; | 
|  | BOOLEAN RewritePartition; | 
|  | } PARTITION_INFORMATION,*PPARTITION_INFORMATION; | 
|  |  | 
|  | typedef struct _SET_PARTITION_INFORMATION { | 
|  | BYTE PartitionType; | 
|  | } SET_PARTITION_INFORMATION,*PSET_PARTITION_INFORMATION; | 
|  |  | 
|  | typedef struct _DRIVE_LAYOUT_INFORMATION { | 
|  | DWORD PartitionCount; | 
|  | DWORD Signature; | 
|  | PARTITION_INFORMATION PartitionEntry[1]; | 
|  | } DRIVE_LAYOUT_INFORMATION,*PDRIVE_LAYOUT_INFORMATION; | 
|  |  | 
|  | typedef struct _VERIFY_INFORMATION { | 
|  | LARGE_INTEGER StartingOffset; | 
|  | DWORD Length; | 
|  | } VERIFY_INFORMATION,*PVERIFY_INFORMATION; | 
|  |  | 
|  | typedef struct _REASSIGN_BLOCKS { | 
|  | WORD Reserved; | 
|  | WORD Count; | 
|  | DWORD BlockNumber[1]; | 
|  | } REASSIGN_BLOCKS,*PREASSIGN_BLOCKS; | 
|  |  | 
|  | #include <pshpack1.h> | 
|  | typedef struct _REASSIGN_BLOCKS_EX { | 
|  | WORD Reserved; | 
|  | WORD Count; | 
|  | LARGE_INTEGER BlockNumber[1]; | 
|  | } REASSIGN_BLOCKS_EX,*PREASSIGN_BLOCKS_EX; | 
|  | #include <poppack.h> | 
|  |  | 
|  | typedef enum _PARTITION_STYLE { | 
|  | PARTITION_STYLE_MBR,PARTITION_STYLE_GPT,PARTITION_STYLE_RAW | 
|  | } PARTITION_STYLE; | 
|  |  | 
|  | typedef struct _PARTITION_INFORMATION_GPT { | 
|  | GUID PartitionType; | 
|  | GUID PartitionId; | 
|  | DWORD64 Attributes; | 
|  | WCHAR Name [36]; | 
|  | } PARTITION_INFORMATION_GPT,*PPARTITION_INFORMATION_GPT; | 
|  |  | 
|  | #define GPT_ATTRIBUTE_PLATFORM_REQUIRED (0x0000000000000001) | 
|  |  | 
|  | #define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x8000000000000000) | 
|  | #define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN (0x4000000000000000) | 
|  | #define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY (0x2000000000000000) | 
|  | #define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY (0x1000000000000000) | 
|  |  | 
|  | typedef struct _PARTITION_INFORMATION_MBR { | 
|  | BYTE PartitionType; | 
|  | BOOLEAN BootIndicator; | 
|  | BOOLEAN RecognizedPartition; | 
|  | DWORD HiddenSectors; | 
|  | } PARTITION_INFORMATION_MBR,*PPARTITION_INFORMATION_MBR; | 
|  |  | 
|  | typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR; | 
|  | typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT; | 
|  |  | 
|  | typedef struct _SET_PARTITION_INFORMATION_EX { | 
|  | PARTITION_STYLE PartitionStyle; | 
|  | __C89_NAMELESS union { | 
|  | SET_PARTITION_INFORMATION_MBR Mbr; | 
|  | SET_PARTITION_INFORMATION_GPT Gpt; | 
|  | } DUMMYUNIONNAME; | 
|  | } SET_PARTITION_INFORMATION_EX,*PSET_PARTITION_INFORMATION_EX; | 
|  |  | 
|  | typedef struct _CREATE_DISK_GPT { | 
|  | GUID DiskId; | 
|  | DWORD MaxPartitionCount; | 
|  | } CREATE_DISK_GPT,*PCREATE_DISK_GPT; | 
|  |  | 
|  | typedef struct _CREATE_DISK_MBR { | 
|  | DWORD Signature; | 
|  | } CREATE_DISK_MBR,*PCREATE_DISK_MBR; | 
|  |  | 
|  | typedef struct _CREATE_DISK { | 
|  | PARTITION_STYLE PartitionStyle; | 
|  | __C89_NAMELESS union { | 
|  | CREATE_DISK_MBR Mbr; | 
|  | CREATE_DISK_GPT Gpt; | 
|  | } DUMMYUNIONNAME; | 
|  | } CREATE_DISK,*PCREATE_DISK; | 
|  |  | 
|  | typedef struct _GET_LENGTH_INFORMATION { | 
|  | LARGE_INTEGER Length; | 
|  | } GET_LENGTH_INFORMATION,*PGET_LENGTH_INFORMATION; | 
|  |  | 
|  | typedef struct _PARTITION_INFORMATION_EX { | 
|  | PARTITION_STYLE PartitionStyle; | 
|  | LARGE_INTEGER StartingOffset; | 
|  | LARGE_INTEGER PartitionLength; | 
|  | DWORD PartitionNumber; | 
|  | BOOLEAN RewritePartition; | 
|  | __C89_NAMELESS union { | 
|  | PARTITION_INFORMATION_MBR Mbr; | 
|  | PARTITION_INFORMATION_GPT Gpt; | 
|  | } DUMMYUNIONNAME; | 
|  | } PARTITION_INFORMATION_EX,*PPARTITION_INFORMATION_EX; | 
|  |  | 
|  | typedef struct _DRIVE_LAYOUT_INFORMATION_GPT { | 
|  | GUID DiskId; | 
|  | LARGE_INTEGER StartingUsableOffset; | 
|  | LARGE_INTEGER UsableLength; | 
|  | DWORD MaxPartitionCount; | 
|  | } DRIVE_LAYOUT_INFORMATION_GPT,*PDRIVE_LAYOUT_INFORMATION_GPT; | 
|  |  | 
|  | typedef struct _DRIVE_LAYOUT_INFORMATION_MBR { | 
|  | DWORD Signature; | 
|  | } DRIVE_LAYOUT_INFORMATION_MBR,*PDRIVE_LAYOUT_INFORMATION_MBR; | 
|  |  | 
|  | typedef struct _DRIVE_LAYOUT_INFORMATION_EX { | 
|  | DWORD PartitionStyle; | 
|  | DWORD PartitionCount; | 
|  | __C89_NAMELESS union { | 
|  | DRIVE_LAYOUT_INFORMATION_MBR Mbr; | 
|  | DRIVE_LAYOUT_INFORMATION_GPT Gpt; | 
|  | } DUMMYUNIONNAME; | 
|  | PARTITION_INFORMATION_EX PartitionEntry[1]; | 
|  | } DRIVE_LAYOUT_INFORMATION_EX,*PDRIVE_LAYOUT_INFORMATION_EX; | 
|  |  | 
|  | typedef enum _DETECTION_TYPE { | 
|  | DetectNone,DetectInt13,DetectExInt13 | 
|  | } DETECTION_TYPE; | 
|  |  | 
|  | typedef struct _DISK_INT13_INFO { | 
|  | WORD DriveSelect; | 
|  | DWORD MaxCylinders; | 
|  | WORD SectorsPerTrack; | 
|  | WORD MaxHeads; | 
|  | WORD NumberDrives; | 
|  | } DISK_INT13_INFO,*PDISK_INT13_INFO; | 
|  |  | 
|  | typedef struct _DISK_EX_INT13_INFO { | 
|  | WORD ExBufferSize; | 
|  | WORD ExFlags; | 
|  | DWORD ExCylinders; | 
|  | DWORD ExHeads; | 
|  | DWORD ExSectorsPerTrack; | 
|  | DWORD64 ExSectorsPerDrive; | 
|  | WORD ExSectorSize; | 
|  | WORD ExReserved; | 
|  | } DISK_EX_INT13_INFO,*PDISK_EX_INT13_INFO; | 
|  |  | 
|  | typedef struct _DISK_DETECTION_INFO { | 
|  | DWORD SizeOfDetectInfo; | 
|  | DETECTION_TYPE DetectionType; | 
|  | __C89_NAMELESS union { | 
|  | __C89_NAMELESS struct { | 
|  | DISK_INT13_INFO Int13; | 
|  | DISK_EX_INT13_INFO ExInt13; | 
|  | } DUMMYSTRUCTNAME; | 
|  | } DUMMYUNIONNAME; | 
|  | } DISK_DETECTION_INFO,*PDISK_DETECTION_INFO; | 
|  |  | 
|  | typedef struct _DISK_PARTITION_INFO { | 
|  | DWORD SizeOfPartitionInfo; | 
|  | PARTITION_STYLE PartitionStyle; | 
|  | __C89_NAMELESS union { | 
|  | struct { | 
|  | DWORD Signature; | 
|  | DWORD CheckSum; | 
|  | } Mbr; | 
|  | struct { | 
|  | GUID DiskId; | 
|  | } Gpt; | 
|  | } DUMMYUNIONNAME; | 
|  | } DISK_PARTITION_INFO,*PDISK_PARTITION_INFO; | 
|  |  | 
|  | #define DiskGeometryGetPartition(Geometry) ((PDISK_PARTITION_INFO)((Geometry)->Data)) | 
|  | #define DiskGeometryGetDetect(Geometry) ((PDISK_DETECTION_INFO)(((DWORD_PTR)DiskGeometryGetPartition(Geometry)+ DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo))) | 
|  |  | 
|  | typedef struct _DISK_GEOMETRY_EX { | 
|  | DISK_GEOMETRY Geometry; | 
|  | LARGE_INTEGER DiskSize; | 
|  | BYTE Data[1]; | 
|  | } DISK_GEOMETRY_EX,*PDISK_GEOMETRY_EX; | 
|  |  | 
|  | typedef struct _DISK_CONTROLLER_NUMBER { | 
|  | DWORD ControllerNumber; | 
|  | DWORD DiskNumber; | 
|  | } DISK_CONTROLLER_NUMBER,*PDISK_CONTROLLER_NUMBER; | 
|  |  | 
|  | typedef enum { | 
|  | EqualPriority,KeepPrefetchedData,KeepReadData | 
|  | } DISK_CACHE_RETENTION_PRIORITY; | 
|  |  | 
|  | typedef struct _DISK_CACHE_INFORMATION { | 
|  | BOOLEAN ParametersSavable; | 
|  | BOOLEAN ReadCacheEnabled; | 
|  | BOOLEAN WriteCacheEnabled; | 
|  | DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; | 
|  | DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; | 
|  | WORD DisablePrefetchTransferLength; | 
|  | BOOLEAN PrefetchScalar; | 
|  | __C89_NAMELESS union { | 
|  | struct { | 
|  | WORD Minimum; | 
|  | WORD Maximum; | 
|  | WORD MaximumBlocks; | 
|  | } ScalarPrefetch; | 
|  | struct { | 
|  | WORD Minimum; | 
|  | WORD Maximum; | 
|  | } BlockPrefetch; | 
|  | } DUMMYUNIONNAME; | 
|  | } DISK_CACHE_INFORMATION,*PDISK_CACHE_INFORMATION; | 
|  |  | 
|  | typedef struct _DISK_GROW_PARTITION { | 
|  | DWORD PartitionNumber; | 
|  | LARGE_INTEGER BytesToGrow; | 
|  | } DISK_GROW_PARTITION,*PDISK_GROW_PARTITION; | 
|  |  | 
|  | #define HIST_NO_OF_BUCKETS 24 | 
|  |  | 
|  | typedef struct _HISTOGRAM_BUCKET { | 
|  | DWORD Reads; | 
|  | DWORD Writes; | 
|  | } HISTOGRAM_BUCKET,*PHISTOGRAM_BUCKET; | 
|  |  | 
|  | #define HISTOGRAM_BUCKET_SIZE sizeof(HISTOGRAM_BUCKET) | 
|  |  | 
|  | typedef struct _DISK_HISTOGRAM { | 
|  | LARGE_INTEGER DiskSize; | 
|  | LARGE_INTEGER Start; | 
|  | LARGE_INTEGER End; | 
|  | LARGE_INTEGER Average; | 
|  | LARGE_INTEGER AverageRead; | 
|  | LARGE_INTEGER AverageWrite; | 
|  | DWORD Granularity; | 
|  | DWORD Size; | 
|  | DWORD ReadCount; | 
|  | DWORD WriteCount; | 
|  | PHISTOGRAM_BUCKET Histogram; | 
|  | } DISK_HISTOGRAM,*PDISK_HISTOGRAM; | 
|  |  | 
|  | #define DISK_HISTOGRAM_SIZE sizeof(DISK_HISTOGRAM) | 
|  |  | 
|  | typedef struct _DISK_PERFORMANCE { | 
|  | LARGE_INTEGER BytesRead; | 
|  | LARGE_INTEGER BytesWritten; | 
|  | LARGE_INTEGER ReadTime; | 
|  | LARGE_INTEGER WriteTime; | 
|  | LARGE_INTEGER IdleTime; | 
|  | DWORD ReadCount; | 
|  | DWORD WriteCount; | 
|  | DWORD QueueDepth; | 
|  | DWORD SplitCount; | 
|  | LARGE_INTEGER QueryTime; | 
|  | DWORD StorageDeviceNumber; | 
|  | WCHAR StorageManagerName[8]; | 
|  | } DISK_PERFORMANCE,*PDISK_PERFORMANCE; | 
|  |  | 
|  | typedef struct _DISK_RECORD { | 
|  | LARGE_INTEGER ByteOffset; | 
|  | LARGE_INTEGER StartTime; | 
|  | LARGE_INTEGER EndTime; | 
|  | PVOID VirtualAddress; | 
|  | DWORD NumberOfBytes; | 
|  | BYTE DeviceNumber; | 
|  | BOOLEAN ReadRequest; | 
|  | } DISK_RECORD,*PDISK_RECORD; | 
|  |  | 
|  | typedef struct _DISK_LOGGING { | 
|  | BYTE Function; | 
|  | PVOID BufferAddress; | 
|  | DWORD BufferSize; | 
|  | } DISK_LOGGING,*PDISK_LOGGING; | 
|  |  | 
|  | #define DISK_LOGGING_START 0 | 
|  | #define DISK_LOGGING_STOP 1 | 
|  | #define DISK_LOGGING_DUMP 2 | 
|  | #define DISK_BINNING 3 | 
|  |  | 
|  | typedef enum _BIN_TYPES { | 
|  | RequestSize,RequestLocation | 
|  | } BIN_TYPES; | 
|  |  | 
|  | typedef struct _BIN_RANGE { | 
|  | LARGE_INTEGER StartValue; | 
|  | LARGE_INTEGER Length; | 
|  | } BIN_RANGE,*PBIN_RANGE; | 
|  |  | 
|  | typedef struct _PERF_BIN { | 
|  | DWORD NumberOfBins; | 
|  | DWORD TypeOfBin; | 
|  | BIN_RANGE BinsRanges[1]; | 
|  | } PERF_BIN,*PPERF_BIN; | 
|  |  | 
|  | typedef struct _BIN_COUNT { | 
|  | BIN_RANGE BinRange; | 
|  | DWORD BinCount; | 
|  | } BIN_COUNT,*PBIN_COUNT; | 
|  |  | 
|  | typedef struct _BIN_RESULTS { | 
|  | DWORD NumberOfBins; | 
|  | BIN_COUNT BinCounts[1]; | 
|  | } BIN_RESULTS,*PBIN_RESULTS; | 
|  |  | 
|  | #include <pshpack1.h> | 
|  | typedef struct _GETVERSIONINPARAMS { | 
|  | BYTE bVersion; | 
|  | BYTE bRevision; | 
|  | BYTE bReserved; | 
|  | BYTE bIDEDeviceMap; | 
|  | DWORD fCapabilities; | 
|  | DWORD dwReserved[4]; | 
|  | } GETVERSIONINPARAMS,*PGETVERSIONINPARAMS,*LPGETVERSIONINPARAMS; | 
|  | #include <poppack.h> | 
|  |  | 
|  | #define CAP_ATA_ID_CMD 1 | 
|  | #define CAP_ATAPI_ID_CMD 2 | 
|  | #define CAP_SMART_CMD 4 | 
|  |  | 
|  | #include <pshpack1.h> | 
|  | typedef struct _IDEREGS { | 
|  | BYTE bFeaturesReg; | 
|  | BYTE bSectorCountReg; | 
|  | BYTE bSectorNumberReg; | 
|  | BYTE bCylLowReg; | 
|  | BYTE bCylHighReg; | 
|  | BYTE bDriveHeadReg; | 
|  | BYTE bCommandReg; | 
|  | BYTE bReserved; | 
|  | } IDEREGS,*PIDEREGS,*LPIDEREGS; | 
|  | #include <poppack.h> | 
|  |  | 
|  | #define ATAPI_ID_CMD 0xA1 | 
|  | #define ID_CMD 0xEC | 
|  | #define SMART_CMD 0xB0 | 
|  |  | 
|  | #define SMART_CYL_LOW 0x4F | 
|  | #define SMART_CYL_HI 0xC2 | 
|  |  | 
|  | #include <pshpack1.h> | 
|  | typedef struct _SENDCMDINPARAMS { | 
|  | DWORD cBufferSize; | 
|  | IDEREGS irDriveRegs; | 
|  | BYTE bDriveNumber; | 
|  | BYTE bReserved[3]; | 
|  | DWORD dwReserved[4]; | 
|  | BYTE bBuffer[1]; | 
|  | } SENDCMDINPARAMS,*PSENDCMDINPARAMS,*LPSENDCMDINPARAMS; | 
|  | #include <poppack.h> | 
|  |  | 
|  | #include <pshpack1.h> | 
|  | typedef struct _DRIVERSTATUS { | 
|  | BYTE bDriverError; | 
|  | BYTE bIDEError; | 
|  | BYTE bReserved[2]; | 
|  | DWORD dwReserved[2]; | 
|  | } DRIVERSTATUS,*PDRIVERSTATUS,*LPDRIVERSTATUS; | 
|  | #include <poppack.h> | 
|  |  | 
|  | #define SMART_NO_ERROR 0 | 
|  | #define SMART_IDE_ERROR 1 | 
|  | #define SMART_INVALID_FLAG 2 | 
|  | #define SMART_INVALID_COMMAND 3 | 
|  | #define SMART_INVALID_BUFFER 4 | 
|  | #define SMART_INVALID_DRIVE 5 | 
|  | #define SMART_INVALID_IOCTL 6 | 
|  | #define SMART_ERROR_NO_MEM 7 | 
|  | #define SMART_INVALID_REGISTER 8 | 
|  | #define SMART_NOT_SUPPORTED 9 | 
|  | #define SMART_NO_IDE_DEVICE 10 | 
|  |  | 
|  | #define SMART_OFFLINE_ROUTINE_OFFLINE 0 | 
|  | #define SMART_SHORT_SELFTEST_OFFLINE 1 | 
|  | #define SMART_EXTENDED_SELFTEST_OFFLINE 2 | 
|  | #define SMART_ABORT_OFFLINE_SELFTEST 127 | 
|  | #define SMART_SHORT_SELFTEST_CAPTIVE 129 | 
|  | #define SMART_EXTENDED_SELFTEST_CAPTIVE 130 | 
|  |  | 
|  | #include <pshpack1.h> | 
|  | typedef struct _SENDCMDOUTPARAMS { | 
|  | DWORD cBufferSize; | 
|  | DRIVERSTATUS DriverStatus; | 
|  | BYTE bBuffer[1]; | 
|  | } SENDCMDOUTPARAMS,*PSENDCMDOUTPARAMS,*LPSENDCMDOUTPARAMS; | 
|  | #include <poppack.h> | 
|  |  | 
|  | #define READ_ATTRIBUTE_BUFFER_SIZE 512 | 
|  | #define IDENTIFY_BUFFER_SIZE 512 | 
|  | #define READ_THRESHOLD_BUFFER_SIZE 512 | 
|  | #define SMART_LOG_SECTOR_SIZE 512 | 
|  |  | 
|  | #define READ_ATTRIBUTES 0xD0 | 
|  | #define READ_THRESHOLDS 0xD1 | 
|  | #define ENABLE_DISABLE_AUTOSAVE 0xD2 | 
|  | #define SAVE_ATTRIBUTE_VALUES 0xD3 | 
|  | #define EXECUTE_OFFLINE_DIAGS 0xD4 | 
|  | #define SMART_READ_LOG 0xD5 | 
|  | #define SMART_WRITE_LOG 0xd6 | 
|  | #define ENABLE_SMART 0xD8 | 
|  | #define DISABLE_SMART 0xD9 | 
|  | #define RETURN_SMART_STATUS 0xDA | 
|  | #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB | 
|  |  | 
|  | #endif /* _NTDDDISK_H_ */ | 
|  |  | 
|  |  | 
|  | #define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER | 
|  | #define IOCTL_CHANGER_GET_PARAMETERS CTL_CODE(IOCTL_CHANGER_BASE,0x0000,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_GET_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_GET_PRODUCT_DATA CTL_CODE(IOCTL_CHANGER_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_SET_ACCESS CTL_CODE(IOCTL_CHANGER_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_CHANGER_GET_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0005,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_SET_POSITION CTL_CODE(IOCTL_CHANGER_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_EXCHANGE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0008,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_MOVE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0009,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT CTL_CODE(IOCTL_CHANGER_BASE,0x000A,METHOD_BUFFERED,FILE_READ_ACCESS) | 
|  | #define IOCTL_CHANGER_QUERY_VOLUME_TAGS CTL_CODE(IOCTL_CHANGER_BASE,0x000B,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  |  | 
|  | #define MAX_VOLUME_ID_SIZE 36 | 
|  | #define MAX_VOLUME_TEMPLATE_SIZE 40 | 
|  |  | 
|  | #define VENDOR_ID_LENGTH 8 | 
|  | #define PRODUCT_ID_LENGTH 16 | 
|  | #define REVISION_LENGTH 4 | 
|  | #define SERIAL_NUMBER_LENGTH 32 | 
|  |  | 
|  | typedef enum _ELEMENT_TYPE { | 
|  | AllElements,ChangerTransport,ChangerSlot,ChangerIEPort,ChangerDrive,ChangerDoor,ChangerKeypad,ChangerMaxElement | 
|  | } ELEMENT_TYPE,*PELEMENT_TYPE; | 
|  |  | 
|  | typedef struct _CHANGER_ELEMENT { | 
|  | ELEMENT_TYPE ElementType; | 
|  | DWORD ElementAddress; | 
|  | } CHANGER_ELEMENT,*PCHANGER_ELEMENT; | 
|  |  | 
|  | typedef struct _CHANGER_ELEMENT_LIST { | 
|  | CHANGER_ELEMENT Element; | 
|  | DWORD NumberOfElements; | 
|  | } CHANGER_ELEMENT_LIST ,*PCHANGER_ELEMENT_LIST; | 
|  |  | 
|  | #define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001 | 
|  | #define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002 | 
|  | #define CHANGER_CLOSE_IEPORT 0x00000004 | 
|  | #define CHANGER_OPEN_IEPORT 0x00000008 | 
|  |  | 
|  | #define CHANGER_STATUS_NON_VOLATILE 0x00000010 | 
|  | #define CHANGER_EXCHANGE_MEDIA 0x00000020 | 
|  | #define CHANGER_CLEANER_SLOT 0x00000040 | 
|  | #define CHANGER_LOCK_UNLOCK 0x00000080 | 
|  |  | 
|  | #define CHANGER_CARTRIDGE_MAGAZINE 0x00000100 | 
|  | #define CHANGER_MEDIUM_FLIP 0x00000200 | 
|  | #define CHANGER_POSITION_TO_ELEMENT 0x00000400 | 
|  | #define CHANGER_REPORT_IEPORT_STATE 0x00000800 | 
|  |  | 
|  | #define CHANGER_STORAGE_DRIVE 0x00001000 | 
|  | #define CHANGER_STORAGE_IEPORT 0x00002000 | 
|  | #define CHANGER_STORAGE_SLOT 0x00004000 | 
|  | #define CHANGER_STORAGE_TRANSPORT 0x00008000 | 
|  |  | 
|  | #define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000 | 
|  |  | 
|  | #define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000 | 
|  |  | 
|  | #define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000 | 
|  | #define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000 | 
|  |  | 
|  | #define CHANGER_VOLUME_IDENTIFICATION 0x00100000 | 
|  | #define CHANGER_VOLUME_SEARCH 0x00200000 | 
|  | #define CHANGER_VOLUME_ASSERT 0x00400000 | 
|  | #define CHANGER_VOLUME_REPLACE 0x00800000 | 
|  | #define CHANGER_VOLUME_UNDEFINE 0x01000000 | 
|  |  | 
|  | #define CHANGER_SERIAL_NUMBER_VALID 0x04000000 | 
|  |  | 
|  | #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000 | 
|  | #define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000 | 
|  | #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000 | 
|  |  | 
|  | #define CHANGER_RESERVED_BIT 0x80000000 | 
|  |  | 
|  | #define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT 0x80000001 | 
|  | #define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE 0x80000002 | 
|  | #define CHANGER_CLEANER_AUTODISMOUNT 0x80000004 | 
|  | #define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008 | 
|  | #define CHANGER_SLOTS_USE_TRAYS 0x80000010 | 
|  | #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020 | 
|  | #define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040 | 
|  | #define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080 | 
|  | #define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100 | 
|  | #define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200 | 
|  | #define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400 | 
|  |  | 
|  | #define CHANGER_TO_TRANSPORT 0x01 | 
|  | #define CHANGER_TO_SLOT 0x02 | 
|  | #define CHANGER_TO_IEPORT 0x04 | 
|  | #define CHANGER_TO_DRIVE 0x08 | 
|  |  | 
|  | #define LOCK_UNLOCK_IEPORT 0x01 | 
|  | #define LOCK_UNLOCK_DOOR 0x02 | 
|  | #define LOCK_UNLOCK_KEYPAD 0x04 | 
|  |  | 
|  | typedef struct _GET_CHANGER_PARAMETERS { | 
|  | DWORD Size; | 
|  | WORD NumberTransportElements; | 
|  | WORD NumberStorageElements; | 
|  | WORD NumberCleanerSlots; | 
|  | WORD NumberIEElements; | 
|  | WORD NumberDataTransferElements; | 
|  | WORD NumberOfDoors; | 
|  | WORD FirstSlotNumber; | 
|  | WORD FirstDriveNumber; | 
|  | WORD FirstTransportNumber; | 
|  | WORD FirstIEPortNumber; | 
|  | WORD FirstCleanerSlotAddress; | 
|  | WORD MagazineSize; | 
|  | DWORD DriveCleanTimeout; | 
|  | DWORD Features0; | 
|  | DWORD Features1; | 
|  | BYTE MoveFromTransport; | 
|  | BYTE MoveFromSlot; | 
|  | BYTE MoveFromIePort; | 
|  | BYTE MoveFromDrive; | 
|  | BYTE ExchangeFromTransport; | 
|  | BYTE ExchangeFromSlot; | 
|  | BYTE ExchangeFromIePort; | 
|  | BYTE ExchangeFromDrive; | 
|  | BYTE LockUnlockCapabilities; | 
|  | BYTE PositionCapabilities; | 
|  | BYTE Reserved1[2]; | 
|  | DWORD Reserved2[2]; | 
|  | } GET_CHANGER_PARAMETERS,*PGET_CHANGER_PARAMETERS; | 
|  |  | 
|  | typedef struct _CHANGER_PRODUCT_DATA { | 
|  | BYTE VendorId[VENDOR_ID_LENGTH]; | 
|  | BYTE ProductId[PRODUCT_ID_LENGTH]; | 
|  | BYTE Revision[REVISION_LENGTH]; | 
|  | BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; | 
|  | BYTE DeviceType; | 
|  | } CHANGER_PRODUCT_DATA,*PCHANGER_PRODUCT_DATA; | 
|  |  | 
|  | #define LOCK_ELEMENT 0 | 
|  | #define UNLOCK_ELEMENT 1 | 
|  | #define EXTEND_IEPORT 2 | 
|  | #define RETRACT_IEPORT 3 | 
|  |  | 
|  | typedef struct _CHANGER_SET_ACCESS { | 
|  | CHANGER_ELEMENT Element; | 
|  | DWORD Control; | 
|  | } CHANGER_SET_ACCESS,*PCHANGER_SET_ACCESS; | 
|  |  | 
|  | typedef struct _CHANGER_READ_ELEMENT_STATUS { | 
|  | CHANGER_ELEMENT_LIST ElementList; | 
|  | BOOLEAN VolumeTagInfo; | 
|  | } CHANGER_READ_ELEMENT_STATUS,*PCHANGER_READ_ELEMENT_STATUS; | 
|  |  | 
|  | typedef struct _CHANGER_ELEMENT_STATUS { | 
|  | CHANGER_ELEMENT Element; | 
|  | CHANGER_ELEMENT SrcElementAddress; | 
|  | DWORD Flags; | 
|  | DWORD ExceptionCode; | 
|  | BYTE TargetId; | 
|  | BYTE Lun; | 
|  | WORD Reserved; | 
|  | BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; | 
|  | BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; | 
|  | } CHANGER_ELEMENT_STATUS,*PCHANGER_ELEMENT_STATUS; | 
|  |  | 
|  | typedef struct _CHANGER_ELEMENT_STATUS_EX { | 
|  | CHANGER_ELEMENT Element; | 
|  | CHANGER_ELEMENT SrcElementAddress; | 
|  | DWORD Flags; | 
|  | DWORD ExceptionCode; | 
|  | BYTE TargetId; | 
|  | BYTE Lun; | 
|  | WORD Reserved; | 
|  | BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE]; | 
|  | BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE]; | 
|  | BYTE VendorIdentification[VENDOR_ID_LENGTH]; | 
|  | BYTE ProductIdentification[PRODUCT_ID_LENGTH]; | 
|  | BYTE SerialNumber[SERIAL_NUMBER_LENGTH]; | 
|  | } CHANGER_ELEMENT_STATUS_EX,*PCHANGER_ELEMENT_STATUS_EX; | 
|  |  | 
|  | #define ELEMENT_STATUS_FULL 0x00000001 | 
|  | #define ELEMENT_STATUS_IMPEXP 0x00000002 | 
|  | #define ELEMENT_STATUS_EXCEPT 0x00000004 | 
|  | #define ELEMENT_STATUS_ACCESS 0x00000008 | 
|  | #define ELEMENT_STATUS_EXENAB 0x00000010 | 
|  | #define ELEMENT_STATUS_INENAB 0x00000020 | 
|  |  | 
|  | #define ELEMENT_STATUS_PRODUCT_DATA 0x00000040 | 
|  |  | 
|  | #define ELEMENT_STATUS_LUN_VALID 0x00001000 | 
|  | #define ELEMENT_STATUS_ID_VALID 0x00002000 | 
|  | #define ELEMENT_STATUS_NOT_BUS 0x00008000 | 
|  | #define ELEMENT_STATUS_INVERT 0x00400000 | 
|  | #define ELEMENT_STATUS_SVALID 0x00800000 | 
|  |  | 
|  | #define ELEMENT_STATUS_PVOLTAG 0x10000000 | 
|  | #define ELEMENT_STATUS_AVOLTAG 0x20000000 | 
|  |  | 
|  | #define ERROR_LABEL_UNREADABLE 0x00000001 | 
|  | #define ERROR_LABEL_QUESTIONABLE 0x00000002 | 
|  | #define ERROR_SLOT_NOT_PRESENT 0x00000004 | 
|  | #define ERROR_DRIVE_NOT_INSTALLED 0x00000008 | 
|  | #define ERROR_TRAY_MALFUNCTION 0x00000010 | 
|  | #define ERROR_INIT_STATUS_NEEDED 0x00000011 | 
|  | #define ERROR_UNHANDLED_ERROR 0xFFFFFFFF | 
|  |  | 
|  | typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS { | 
|  | CHANGER_ELEMENT_LIST ElementList; | 
|  | BOOLEAN BarCodeScan; | 
|  | } CHANGER_INITIALIZE_ELEMENT_STATUS,*PCHANGER_INITIALIZE_ELEMENT_STATUS; | 
|  |  | 
|  | typedef struct _CHANGER_SET_POSITION { | 
|  | CHANGER_ELEMENT Transport; | 
|  | CHANGER_ELEMENT Destination; | 
|  | BOOLEAN Flip; | 
|  | } CHANGER_SET_POSITION,*PCHANGER_SET_POSITION; | 
|  |  | 
|  | typedef struct _CHANGER_EXCHANGE_MEDIUM { | 
|  | CHANGER_ELEMENT Transport; | 
|  | CHANGER_ELEMENT Source; | 
|  | CHANGER_ELEMENT Destination1; | 
|  | CHANGER_ELEMENT Destination2; | 
|  | BOOLEAN Flip1; | 
|  | BOOLEAN Flip2; | 
|  | } CHANGER_EXCHANGE_MEDIUM,*PCHANGER_EXCHANGE_MEDIUM; | 
|  |  | 
|  | typedef struct _CHANGER_MOVE_MEDIUM { | 
|  | CHANGER_ELEMENT Transport; | 
|  | CHANGER_ELEMENT Source; | 
|  | CHANGER_ELEMENT Destination; | 
|  | BOOLEAN Flip; | 
|  | } CHANGER_MOVE_MEDIUM,*PCHANGER_MOVE_MEDIUM; | 
|  |  | 
|  | typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION { | 
|  | CHANGER_ELEMENT StartingElement; | 
|  | DWORD ActionCode; | 
|  | BYTE VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE]; | 
|  | } CHANGER_SEND_VOLUME_TAG_INFORMATION,*PCHANGER_SEND_VOLUME_TAG_INFORMATION; | 
|  |  | 
|  | typedef struct _READ_ELEMENT_ADDRESS_INFO { | 
|  | DWORD NumberOfElements; | 
|  | CHANGER_ELEMENT_STATUS ElementStatus[1]; | 
|  | } READ_ELEMENT_ADDRESS_INFO,*PREAD_ELEMENT_ADDRESS_INFO; | 
|  |  | 
|  | #define SEARCH_ALL 0x0 | 
|  | #define SEARCH_PRIMARY 0x1 | 
|  | #define SEARCH_ALTERNATE 0x2 | 
|  | #define SEARCH_ALL_NO_SEQ 0x4 | 
|  | #define SEARCH_PRI_NO_SEQ 0x5 | 
|  | #define SEARCH_ALT_NO_SEQ 0x6 | 
|  |  | 
|  | #define ASSERT_PRIMARY 0x8 | 
|  | #define ASSERT_ALTERNATE 0x9 | 
|  |  | 
|  | #define REPLACE_PRIMARY 0xA | 
|  | #define REPLACE_ALTERNATE 0xB | 
|  |  | 
|  | #define UNDEFINE_PRIMARY 0xC | 
|  | #define UNDEFINE_ALTERNATE 0xD | 
|  |  | 
|  | typedef enum _CHANGER_DEVICE_PROBLEM_TYPE { | 
|  | DeviceProblemNone,DeviceProblemHardware,DeviceProblemCHMError,DeviceProblemDoorOpen,DeviceProblemCalibrationError,DeviceProblemTargetFailure, | 
|  | DeviceProblemCHMMoveError,DeviceProblemCHMZeroError,DeviceProblemCartridgeInsertError,DeviceProblemPositionError,DeviceProblemSensorError, | 
|  | DeviceProblemCartridgeEjectError,DeviceProblemGripperError,DeviceProblemDriveError | 
|  | } CHANGER_DEVICE_PROBLEM_TYPE,*PCHANGER_DEVICE_PROBLEM_TYPE; | 
|  |  | 
|  | #define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | #define IOCTL_SERENUM_EXPOSE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,128,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_SERENUM_REMOVE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,129,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_SERENUM_PORT_DESC CTL_CODE(FILE_DEVICE_SERENUM,130,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_SERENUM_GET_PORT_NAME CTL_CODE(FILE_DEVICE_SERENUM,131,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | #define SERIAL_LSRMST_ESCAPE ((BYTE)0x00) | 
|  |  | 
|  | #define SERIAL_LSRMST_LSR_DATA ((BYTE)0x01) | 
|  |  | 
|  | #define SERIAL_LSRMST_LSR_NODATA ((BYTE)0x02) | 
|  |  | 
|  | #define SERIAL_LSRMST_MST ((BYTE)0x03) | 
|  |  | 
|  | #define SERIAL_IOC_FCR_FIFO_ENABLE ((DWORD)0x00000001) | 
|  | #define SERIAL_IOC_FCR_RCVR_RESET ((DWORD)0x00000002) | 
|  | #define SERIAL_IOC_FCR_XMIT_RESET ((DWORD)0x00000004) | 
|  | #define SERIAL_IOC_FCR_DMA_MODE ((DWORD)0x00000008) | 
|  | #define SERIAL_IOC_FCR_RES1 ((DWORD)0x00000010) | 
|  | #define SERIAL_IOC_FCR_RES2 ((DWORD)0x00000020) | 
|  | #define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB ((DWORD)0x00000040) | 
|  | #define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB ((DWORD)0x00000080) | 
|  |  | 
|  | #define SERIAL_IOC_MCR_DTR ((DWORD)0x00000001) | 
|  | #define SERIAL_IOC_MCR_RTS ((DWORD)0x00000002) | 
|  | #define SERIAL_IOC_MCR_OUT1 ((DWORD)0x00000004) | 
|  | #define SERIAL_IOC_MCR_OUT2 ((DWORD)0x00000008) | 
|  | #define SERIAL_IOC_MCR_LOOP ((DWORD)0x00000010) | 
|  |  | 
|  | #ifndef _FILESYSTEMFSCTL_ | 
|  | #define _FILESYSTEMFSCTL_ | 
|  |  | 
|  | #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,0,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,1,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,2,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,3,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,4,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,5,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,6,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,7,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,8,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,10,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,11,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,12,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,14,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,15,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) | 
|  |  | 
|  | #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,19,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,20,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,21,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM,22,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,23,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,24,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,26,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,30,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,32,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,35,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,38,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,39,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,40,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,41,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,42,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,43,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,45,METHOD_NEITHER,FILE_READ_DATA) | 
|  | #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,46,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,47,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,48,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,49,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,50,METHOD_BUFFERED,FILE_WRITE_DATA) | 
|  | #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,51,METHOD_NEITHER,FILE_READ_DATA) | 
|  | #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,53,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,54,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,55,METHOD_NEITHER,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,56,METHOD_NEITHER,FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,57,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,58,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,59,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,61,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,62,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,63,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,64,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,65,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) | 
|  | #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM,66,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA) | 
|  | #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,68,METHOD_NEITHER,FILE_READ_DATA | FILE_WRITE_DATA) | 
|  | #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,69,METHOD_NEITHER,FILE_ANY_ACCESS) | 
|  | #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM,71,METHOD_OUT_DIRECT,FILE_READ_DATA) | 
|  | #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM,72,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) | 
|  |  | 
|  | typedef struct _PATHNAME_BUFFER { | 
|  | DWORD PathNameLength; | 
|  | WCHAR Name[1]; | 
|  | } PATHNAME_BUFFER,*PPATHNAME_BUFFER; | 
|  |  | 
|  | typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER { | 
|  | BYTE First0x24BytesOfBootSector[0x24]; | 
|  | } FSCTL_QUERY_FAT_BPB_BUFFER,*PFSCTL_QUERY_FAT_BPB_BUFFER; | 
|  |  | 
|  | typedef struct { | 
|  | LARGE_INTEGER VolumeSerialNumber; | 
|  | LARGE_INTEGER NumberSectors; | 
|  | LARGE_INTEGER TotalClusters; | 
|  | LARGE_INTEGER FreeClusters; | 
|  | LARGE_INTEGER TotalReserved; | 
|  | DWORD BytesPerSector; | 
|  | DWORD BytesPerCluster; | 
|  | DWORD BytesPerFileRecordSegment; | 
|  | DWORD ClustersPerFileRecordSegment; | 
|  | LARGE_INTEGER MftValidDataLength; | 
|  | LARGE_INTEGER MftStartLcn; | 
|  | LARGE_INTEGER Mft2StartLcn; | 
|  | LARGE_INTEGER MftZoneStart; | 
|  | LARGE_INTEGER MftZoneEnd; | 
|  | } NTFS_VOLUME_DATA_BUFFER,*PNTFS_VOLUME_DATA_BUFFER; | 
|  |  | 
|  | typedef struct { | 
|  | DWORD ByteCount; | 
|  | WORD MajorVersion; | 
|  | WORD MinorVersion; | 
|  | } NTFS_EXTENDED_VOLUME_DATA,*PNTFS_EXTENDED_VOLUME_DATA; | 
|  |  | 
|  | typedef struct { | 
|  | LARGE_INTEGER StartingLcn; | 
|  | } STARTING_LCN_INPUT_BUFFER,*PSTARTING_LCN_INPUT_BUFFER; | 
|  |  | 
|  | typedef struct { | 
|  | LARGE_INTEGER StartingLcn; | 
|  | LARGE_INTEGER BitmapSize; | 
|  | BYTE Buffer[1]; | 
|  | } VOLUME_BITMAP_BUFFER,*PVOLUME_BITMAP_BUFFER; | 
|  |  | 
|  | typedef struct { | 
|  | LARGE_INTEGER StartingVcn; | 
|  | } STARTING_VCN_INPUT_BUFFER,*PSTARTING_VCN_INPUT_BUFFER; | 
|  |  | 
|  | typedef struct RETRIEVAL_POINTERS_BUFFER { | 
|  | DWORD ExtentCount; | 
|  | LARGE_INTEGER StartingVcn; | 
|  | struct { | 
|  | LARGE_INTEGER NextVcn; | 
|  | LARGE_INTEGER Lcn; | 
|  | } Extents[1]; | 
|  | } RETRIEVAL_POINTERS_BUFFER,*PRETRIEVAL_POINTERS_BUFFER; | 
|  |  | 
|  | typedef struct { | 
|  | LARGE_INTEGER FileReferenceNumber; | 
|  | } NTFS_FILE_RECORD_INPUT_BUFFER,*PNTFS_FILE_RECORD_INPUT_BUFFER; | 
|  |  | 
|  | typedef struct { | 
|  | LARGE_INTEGER FileReferenceNumber; | 
|  | DWORD FileRecordLength; | 
|  | BYTE FileRecordBuffer[1]; | 
|  | } NTFS_FILE_RECORD_OUTPUT_BUFFER,*PNTFS_FILE_RECORD_OUTPUT_BUFFER; | 
|  |  | 
|  | typedef struct { | 
|  | HANDLE FileHandle; | 
|  | LARGE_INTEGER StartingVcn; | 
|  | LARGE_INTEGER StartingLcn; | 
|  | DWORD ClusterCount; | 
|  | } MOVE_FILE_DATA,*PMOVE_FILE_DATA; | 
|  |  | 
|  | #ifdef _WIN64 | 
|  | typedef struct _MOVE_FILE_DATA32 { | 
|  | UINT32 FileHandle; | 
|  | LARGE_INTEGER StartingVcn; | 
|  | LARGE_INTEGER StartingLcn; | 
|  | DWORD ClusterCount; | 
|  | } MOVE_FILE_DATA32,*PMOVE_FILE_DATA32; | 
|  | #endif | 
|  |  | 
|  | typedef struct { | 
|  | DWORD Restart; | 
|  | SID Sid; | 
|  | } FIND_BY_SID_DATA,*PFIND_BY_SID_DATA; | 
|  |  | 
|  | typedef struct { | 
|  | DWORD NextEntryOffset; | 
|  | DWORD FileIndex; | 
|  | DWORD FileNameLength; | 
|  | WCHAR FileName[1]; | 
|  | } FIND_BY_SID_OUTPUT,*PFIND_BY_SID_OUTPUT; | 
|  |  | 
|  | typedef struct { | 
|  | DWORDLONG StartFileReferenceNumber; | 
|  | USN LowUsn; | 
|  | USN HighUsn; | 
|  | } MFT_ENUM_DATA,*PMFT_ENUM_DATA; | 
|  |  | 
|  | typedef struct { | 
|  | DWORDLONG MaximumSize; | 
|  | DWORDLONG AllocationDelta; | 
|  | } CREATE_USN_JOURNAL_DATA,*PCREATE_USN_JOURNAL_DATA; | 
|  |  | 
|  | typedef struct { | 
|  | USN StartUsn; | 
|  | DWORD ReasonMask; | 
|  | DWORD ReturnOnlyOnClose; | 
|  | DWORDLONG Timeout; | 
|  | DWORDLONG BytesToWaitFor; | 
|  | DWORDLONG UsnJournalID; | 
|  | } READ_USN_JOURNAL_DATA,*PREAD_USN_JOURNAL_DATA; | 
|  |  | 
|  | typedef struct { | 
|  | DWORD RecordLength; | 
|  | WORD MajorVersion; | 
|  | WORD MinorVersion; | 
|  | DWORDLONG FileReferenceNumber; | 
|  | DWORDLONG ParentFileReferenceNumber; | 
|  | USN Usn; | 
|  | LARGE_INTEGER TimeStamp; | 
|  | DWORD Reason; | 
|  | DWORD SourceInfo; | 
|  | DWORD SecurityId; | 
|  | DWORD FileAttributes; | 
|  | WORD FileNameLength; | 
|  | WORD FileNameOffset; | 
|  | WCHAR FileName[1]; | 
|  | } USN_RECORD,*PUSN_RECORD; | 
|  |  | 
|  | #define USN_PAGE_SIZE (0x1000) | 
|  |  | 
|  | #define USN_REASON_DATA_OVERWRITE (0x00000001) | 
|  | #define USN_REASON_DATA_EXTEND (0x00000002) | 
|  | #define USN_REASON_DATA_TRUNCATION (0x00000004) | 
|  | #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010) | 
|  | #define USN_REASON_NAMED_DATA_EXTEND (0x00000020) | 
|  | #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040) | 
|  | #define USN_REASON_FILE_CREATE (0x00000100) | 
|  | #define USN_REASON_FILE_DELETE (0x00000200) | 
|  | #define USN_REASON_EA_CHANGE (0x00000400) | 
|  | #define USN_REASON_SECURITY_CHANGE (0x00000800) | 
|  | #define USN_REASON_RENAME_OLD_NAME (0x00001000) | 
|  | #define USN_REASON_RENAME_NEW_NAME (0x00002000) | 
|  | #define USN_REASON_INDEXABLE_CHANGE (0x00004000) | 
|  | #define USN_REASON_BASIC_INFO_CHANGE (0x00008000) | 
|  | #define USN_REASON_HARD_LINK_CHANGE (0x00010000) | 
|  | #define USN_REASON_COMPRESSION_CHANGE (0x00020000) | 
|  | #define USN_REASON_ENCRYPTION_CHANGE (0x00040000) | 
|  | #define USN_REASON_OBJECT_ID_CHANGE (0x00080000) | 
|  | #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000) | 
|  | #define USN_REASON_STREAM_CHANGE (0x00200000) | 
|  |  | 
|  | #define USN_REASON_CLOSE (0x80000000) | 
|  |  | 
|  | typedef struct { | 
|  | DWORDLONG UsnJournalID; | 
|  | USN FirstUsn; | 
|  | USN NextUsn; | 
|  | USN LowestValidUsn; | 
|  | USN MaxUsn; | 
|  | DWORDLONG MaximumSize; | 
|  | DWORDLONG AllocationDelta; | 
|  | } USN_JOURNAL_DATA,*PUSN_JOURNAL_DATA; | 
|  |  | 
|  | typedef struct { | 
|  | DWORDLONG UsnJournalID; | 
|  | DWORD DeleteFlags; | 
|  | } DELETE_USN_JOURNAL_DATA,*PDELETE_USN_JOURNAL_DATA; | 
|  |  | 
|  | #define USN_DELETE_FLAG_DELETE (0x00000001) | 
|  | #define USN_DELETE_FLAG_NOTIFY (0x00000002) | 
|  |  | 
|  | #define USN_DELETE_VALID_FLAGS (0x00000003) | 
|  |  | 
|  | typedef struct { | 
|  | DWORD UsnSourceInfo; | 
|  | HANDLE VolumeHandle; | 
|  | DWORD HandleInfo; | 
|  | } MARK_HANDLE_INFO,*PMARK_HANDLE_INFO; | 
|  |  | 
|  | #ifdef _WIN64 | 
|  |  | 
|  | typedef struct { | 
|  | DWORD UsnSourceInfo; | 
|  | UINT32 VolumeHandle; | 
|  | DWORD HandleInfo; | 
|  |  | 
|  | } MARK_HANDLE_INFO32,*PMARK_HANDLE_INFO32; | 
|  | #endif | 
|  |  | 
|  | #define USN_SOURCE_DATA_MANAGEMENT (0x00000001) | 
|  | #define USN_SOURCE_AUXILIARY_DATA (0x00000002) | 
|  | #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004) | 
|  |  | 
|  | #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001) | 
|  | #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004) | 
|  | #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008) | 
|  | #define MARK_HANDLE_REALTIME (0x00000020) | 
|  | #define MARK_HANDLE_NOT_REALTIME (0x00000040) | 
|  |  | 
|  | typedef struct { | 
|  | ACCESS_MASK DesiredAccess; | 
|  | DWORD SecurityIds[1]; | 
|  | } BULK_SECURITY_TEST_DATA,*PBULK_SECURITY_TEST_DATA; | 
|  |  | 
|  | #define VOLUME_IS_DIRTY (0x00000001) | 
|  | #define VOLUME_UPGRADE_SCHEDULED (0x00000002) | 
|  |  | 
|  | typedef struct _FILE_PREFETCH { | 
|  | DWORD Type; | 
|  | DWORD Count; | 
|  | DWORDLONG Prefetch[1]; | 
|  | } FILE_PREFETCH,*PFILE_PREFETCH; | 
|  |  | 
|  | #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1 | 
|  |  | 
|  | typedef struct _FILESYSTEM_STATISTICS { | 
|  | WORD FileSystemType; | 
|  | WORD Version; | 
|  | DWORD SizeOfCompleteStructure; | 
|  | DWORD UserFileReads; | 
|  | DWORD UserFileReadBytes; | 
|  | DWORD UserDiskReads; | 
|  | DWORD UserFileWrites; | 
|  | DWORD UserFileWriteBytes; | 
|  | DWORD UserDiskWrites; | 
|  | DWORD MetaDataReads; | 
|  | DWORD MetaDataReadBytes; | 
|  | DWORD MetaDataDiskReads; | 
|  | DWORD MetaDataWrites; | 
|  | DWORD MetaDataWriteBytes; | 
|  | DWORD MetaDataDiskWrites; | 
|  | } FILESYSTEM_STATISTICS,*PFILESYSTEM_STATISTICS; | 
|  |  | 
|  | #define FILESYSTEM_STATISTICS_TYPE_NTFS 1 | 
|  | #define FILESYSTEM_STATISTICS_TYPE_FAT 2 | 
|  |  | 
|  | typedef struct _FAT_STATISTICS { | 
|  | DWORD CreateHits; | 
|  | DWORD SuccessfulCreates; | 
|  | DWORD FailedCreates; | 
|  | DWORD NonCachedReads; | 
|  | DWORD NonCachedReadBytes; | 
|  | DWORD NonCachedWrites; | 
|  | DWORD NonCachedWriteBytes; | 
|  | DWORD NonCachedDiskReads; | 
|  | DWORD NonCachedDiskWrites; | 
|  | } FAT_STATISTICS,*PFAT_STATISTICS; | 
|  |  | 
|  | typedef struct _EXFAT_STATISTICS { | 
|  | DWORD CreateHits; | 
|  | DWORD SuccessfulCreates; | 
|  | DWORD FailedCreates; | 
|  | DWORD NonCachedReads; | 
|  | DWORD NonCachedReadBytes; | 
|  | DWORD NonCachedWrites; | 
|  | DWORD NonCachedWriteBytes; | 
|  | DWORD NonCachedDiskReads; | 
|  | DWORD NonCachedDiskWrites; | 
|  | } EXFAT_STATISTICS, *PEXFAT_STATISTICS; | 
|  |  | 
|  | typedef struct _NTFS_STATISTICS { | 
|  | DWORD LogFileFullExceptions; | 
|  | DWORD OtherExceptions; | 
|  | DWORD MftReads; | 
|  | DWORD MftReadBytes; | 
|  | DWORD MftWrites; | 
|  | DWORD MftWriteBytes; | 
|  | struct { | 
|  | WORD Write; | 
|  | WORD Create; | 
|  | WORD SetInfo; | 
|  | WORD Flush; | 
|  | } MftWritesUserLevel; | 
|  | WORD MftWritesFlushForLogFileFull; | 
|  | WORD MftWritesLazyWriter; | 
|  | WORD MftWritesUserRequest; | 
|  | DWORD Mft2Writes; | 
|  | DWORD Mft2WriteBytes; | 
|  | struct { | 
|  | WORD Write; | 
|  | WORD Create; | 
|  | WORD SetInfo; | 
|  | WORD Flush; | 
|  | } Mft2WritesUserLevel; | 
|  | WORD Mft2WritesFlushForLogFileFull; | 
|  | WORD Mft2WritesLazyWriter; | 
|  | WORD Mft2WritesUserRequest; | 
|  | DWORD RootIndexReads; | 
|  | DWORD RootIndexReadBytes; | 
|  | DWORD RootIndexWrites; | 
|  | DWORD RootIndexWriteBytes; | 
|  | DWORD BitmapReads; | 
|  | DWORD BitmapReadBytes; | 
|  | DWORD BitmapWrites; | 
|  | DWORD BitmapWriteBytes; | 
|  | WORD BitmapWritesFlushForLogFileFull; | 
|  | WORD BitmapWritesLazyWriter; | 
|  | WORD BitmapWritesUserRequest; | 
|  | struct { | 
|  | WORD Write; | 
|  | WORD Create; | 
|  | WORD SetInfo; | 
|  | } BitmapWritesUserLevel; | 
|  | DWORD MftBitmapReads; | 
|  | DWORD MftBitmapReadBytes; | 
|  | DWORD MftBitmapWrites; | 
|  | DWORD MftBitmapWriteBytes; | 
|  | WORD MftBitmapWritesFlushForLogFileFull; | 
|  | WORD MftBitmapWritesLazyWriter; | 
|  | WORD MftBitmapWritesUserRequest; | 
|  | struct { | 
|  | WORD Write; | 
|  | WORD Create; | 
|  | WORD SetInfo; | 
|  | WORD Flush; | 
|  | } MftBitmapWritesUserLevel; | 
|  | DWORD UserIndexReads; | 
|  | DWORD UserIndexReadBytes; | 
|  | DWORD UserIndexWrites; | 
|  | DWORD UserIndexWriteBytes; | 
|  | DWORD LogFileReads; | 
|  | DWORD LogFileReadBytes; | 
|  | DWORD LogFileWrites; | 
|  | DWORD LogFileWriteBytes; | 
|  | struct { | 
|  | DWORD Calls; | 
|  | DWORD Clusters; | 
|  | DWORD Hints; | 
|  | DWORD RunsReturned; | 
|  | DWORD HintsHonored; | 
|  | DWORD HintsClusters; | 
|  | DWORD Cache; | 
|  | DWORD CacheClusters; | 
|  | DWORD CacheMiss; | 
|  | DWORD CacheMissClusters; | 
|  | } Allocate; | 
|  | } NTFS_STATISTICS,*PNTFS_STATISTICS; | 
|  |  | 
|  | typedef struct _FILE_OBJECTID_BUFFER { | 
|  | BYTE ObjectId[16]; | 
|  | __C89_NAMELESS union { | 
|  | __C89_NAMELESS struct { | 
|  | BYTE BirthVolumeId[16]; | 
|  | BYTE BirthObjectId[16]; | 
|  | BYTE DomainId[16]; | 
|  | } DUMMYSTRUCTNAME; | 
|  | BYTE ExtendedInfo[48]; | 
|  | } DUMMYUNIONNAME; | 
|  | } FILE_OBJECTID_BUFFER,*PFILE_OBJECTID_BUFFER; | 
|  |  | 
|  | typedef struct _FILE_SET_SPARSE_BUFFER { | 
|  | BOOLEAN SetSparse; | 
|  | } FILE_SET_SPARSE_BUFFER,*PFILE_SET_SPARSE_BUFFER; | 
|  |  | 
|  | typedef struct _FILE_ZERO_DATA_INFORMATION { | 
|  | LARGE_INTEGER FileOffset; | 
|  | LARGE_INTEGER BeyondFinalZero; | 
|  | } FILE_ZERO_DATA_INFORMATION,*PFILE_ZERO_DATA_INFORMATION; | 
|  |  | 
|  | typedef struct _FILE_ALLOCATED_RANGE_BUFFER { | 
|  | LARGE_INTEGER FileOffset; | 
|  | LARGE_INTEGER Length; | 
|  | } FILE_ALLOCATED_RANGE_BUFFER,*PFILE_ALLOCATED_RANGE_BUFFER; | 
|  |  | 
|  | typedef struct _ENCRYPTION_BUFFER { | 
|  | DWORD EncryptionOperation; | 
|  | BYTE Private[1]; | 
|  | } ENCRYPTION_BUFFER,*PENCRYPTION_BUFFER; | 
|  |  | 
|  | #define FILE_SET_ENCRYPTION 0x00000001 | 
|  | #define FILE_CLEAR_ENCRYPTION 0x00000002 | 
|  | #define STREAM_SET_ENCRYPTION 0x00000003 | 
|  | #define STREAM_CLEAR_ENCRYPTION 0x00000004 | 
|  |  | 
|  | #define MAXIMUM_ENCRYPTION_VALUE 0x00000004 | 
|  |  | 
|  | typedef struct _DECRYPTION_STATUS_BUFFER { | 
|  | BOOLEAN NoEncryptedStreams; | 
|  | } DECRYPTION_STATUS_BUFFER,*PDECRYPTION_STATUS_BUFFER; | 
|  |  | 
|  | #define ENCRYPTION_FORMAT_DEFAULT (0x01) | 
|  | #define COMPRESSION_FORMAT_SPARSE (0x4000) | 
|  |  | 
|  | typedef struct _REQUEST_RAW_ENCRYPTED_DATA { | 
|  | LONGLONG FileOffset; | 
|  | DWORD Length; | 
|  | } REQUEST_RAW_ENCRYPTED_DATA,*PREQUEST_RAW_ENCRYPTED_DATA; | 
|  |  | 
|  | typedef struct _ENCRYPTED_DATA_INFO { | 
|  | DWORDLONG StartingFileOffset; | 
|  | DWORD OutputBufferOffset; | 
|  | DWORD BytesWithinFileSize; | 
|  | DWORD BytesWithinValidDataLength; | 
|  | WORD CompressionFormat; | 
|  | BYTE DataUnitShift; | 
|  | BYTE ChunkShift; | 
|  | BYTE ClusterShift; | 
|  | BYTE EncryptionFormat; | 
|  | WORD NumberOfDataBlocks; | 
|  | DWORD DataBlockSize[ANYSIZE_ARRAY]; | 
|  | } ENCRYPTED_DATA_INFO; | 
|  | typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO; | 
|  |  | 
|  | typedef struct _PLEX_READ_DATA_REQUEST { | 
|  | LARGE_INTEGER ByteOffset; | 
|  | DWORD ByteLength; | 
|  | DWORD PlexNumber; | 
|  | } PLEX_READ_DATA_REQUEST,*PPLEX_READ_DATA_REQUEST; | 
|  |  | 
|  | typedef struct _SI_COPYFILE { | 
|  | DWORD SourceFileNameLength; | 
|  | DWORD DestinationFileNameLength; | 
|  | DWORD Flags; | 
|  | WCHAR FileNameBuffer[1]; | 
|  | } SI_COPYFILE,*PSI_COPYFILE; | 
|  |  | 
|  | #define COPYFILE_SIS_LINK 0x0001 | 
|  | #define COPYFILE_SIS_REPLACE 0x0002 | 
|  | #define COPYFILE_SIS_FLAGS 0x0003 | 
|  |  | 
|  | typedef struct _STORAGE_DESCRIPTOR_HEADER { | 
|  | DWORD Version; | 
|  | DWORD Size; | 
|  | } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER; | 
|  |  | 
|  | typedef enum _STORAGE_PROPERTY_ID { | 
|  | StorageDeviceProperty              = 0, | 
|  | StorageAdapterProperty             = 1, | 
|  | StorageDeviceIdProperty            = 2, | 
|  | StorageDeviceUniqueIdProperty      = 3, | 
|  | StorageDeviceWriteCacheProperty    = 4, | 
|  | StorageMiniportProperty            = 5, | 
|  | StorageAccessAlignmentProperty     = 6, | 
|  | StorageDeviceSeekPenaltyProperty   = 7, | 
|  | StorageDeviceTrimProperty          = 8 | 
|  | } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID; | 
|  |  | 
|  | typedef enum _STORAGE_QUERY_TYPE { | 
|  | PropertyStandardQuery     = 0, | 
|  | PropertyExistsQuery       = 1, | 
|  | PropertyMaskQuery         = 2, | 
|  | PropertyQueryMaxDefined   = 3 | 
|  | } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE; | 
|  |  | 
|  | typedef struct _STORAGE_PROPERTY_QUERY { | 
|  | STORAGE_PROPERTY_ID PropertyId; | 
|  | STORAGE_QUERY_TYPE  QueryType; | 
|  | BYTE                AdditionalParameters[1]; | 
|  | } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; | 
|  |  | 
|  | typedef struct _STORAGE_DEVICE_DESCRIPTOR { | 
|  | DWORD            Version; | 
|  | DWORD            Size; | 
|  | BYTE             DeviceType; | 
|  | BYTE             DeviceTypeModifier; | 
|  | BOOLEAN          RemovableMedia; | 
|  | BOOLEAN          CommandQueueing; | 
|  | DWORD            VendorIdOffset; | 
|  | DWORD            ProductIdOffset; | 
|  | DWORD            ProductRevisionOffset; | 
|  | DWORD            SerialNumberOffset; | 
|  | STORAGE_BUS_TYPE BusType; | 
|  | DWORD            RawPropertiesLength; | 
|  | BYTE             RawDeviceProperties[1]; | 
|  | } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; | 
|  |  | 
|  | typedef struct _STORAGE_ADAPTER_DESCRIPTOR { | 
|  | DWORD   Version; | 
|  | DWORD   Size; | 
|  | DWORD   MaximumTransferLength; | 
|  | DWORD   MaximumPhysicalPages; | 
|  | DWORD   AlignmentMask; | 
|  | BOOLEAN AdapterUsesPio; | 
|  | BOOLEAN AdapterScansDown; | 
|  | BOOLEAN CommandQueueing; | 
|  | BOOLEAN AcceleratedTransfer; | 
|  | BYTE    BusType; | 
|  | WORD    BusMajorVersion; | 
|  | WORD    BusMinorVersion; | 
|  | } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR; | 
|  |  | 
|  | typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR { | 
|  | DWORD Version; | 
|  | DWORD Size; | 
|  | DWORD NumberOfIdentifiers; | 
|  | BYTE  Identifiers[1]; | 
|  | } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR; | 
|  |  | 
|  | typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION { | 
|  | ULONGLONG GptAttributes; | 
|  | } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION; | 
|  |  | 
|  | #if (_WIN32_WINNT >= 0x0600) | 
|  | #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,81, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,82, METHOD_BUFFERED, FILE_READ_DATA) | 
|  | #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,84, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,85, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,86, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,88, METHOD_BUFFERED, FILE_READ_DATA) | 
|  | #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,89, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,90,METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,91, METHOD_BUFFERED, FILE_READ_DATA) | 
|  | #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,92, METHOD_BUFFERED, FILE_READ_DATA) | 
|  | #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,94, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA) | 
|  | #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,99, METHOD_BUFFERED, FILE_READ_DATA) | 
|  | #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) | 
|  | #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA) | 
|  | #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA) | 
|  | #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  |  | 
|  | #define SET_REPAIR_ENABLED 0x00000001 | 
|  | #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002 | 
|  | #define SET_REPAIR_DELETE_CROSSLINK 0x00000004 | 
|  | #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008 | 
|  | #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010 | 
|  |  | 
|  | typedef struct _FILE_MAKE_COMPATIBLE_BUFFER { | 
|  | BOOLEAN CloseDisc; | 
|  | } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER; | 
|  |  | 
|  | typedef struct _FILE_SET_DEFECT_MGMT_BUFFER { | 
|  | BOOLEAN Disable; | 
|  | } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER; | 
|  |  | 
|  | typedef struct _FILE_QUERY_SPARING_BUFFER { | 
|  | ULONG   SparingUnitBytes; | 
|  | BOOLEAN SoftwareSparing; | 
|  | ULONG   TotalSpareBlocks; | 
|  | ULONG   FreeSpareBlocks; | 
|  | } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER; | 
|  |  | 
|  | typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER { | 
|  | LARGE_INTEGER DirectoryCount; | 
|  | LARGE_INTEGER FileCount; | 
|  | WORD          FsFormatMajVersion; | 
|  | WORD          FsFormatMinVersion; | 
|  | WCHAR         FsFormatName[12]; | 
|  | LARGE_INTEGER FormatTime; | 
|  | LARGE_INTEGER LastUpdateTime; | 
|  | WCHAR         CopyrightInfo[34]; | 
|  | WCHAR         AbstractInfo[34]; | 
|  | WCHAR         FormattingImplementationInfo[34]; | 
|  | WCHAR         LastModifyingImplementationInfo[34]; | 
|  | } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER; | 
|  |  | 
|  | #define SET_REPAIR_ENABLED                          0x00000001 | 
|  | #define SET_REPAIR_VOLUME_BITMAP_SCAN               0x00000002 | 
|  | #define SET_REPAIR_DELETE_CROSSLINK                 0x00000004 | 
|  | #define SET_REPAIR_WARN_ABOUT_DATA_LOSS             0x00000008 | 
|  | #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010 | 
|  | #define SET_REPAIR_VALID_MASK                       0x0000001F | 
|  |  | 
|  | typedef enum _SHRINK_VOLUME_REQUEST_TYPES { | 
|  | ShrinkPrepare, | 
|  | ShrinkCommit, | 
|  | ShrinkAbort | 
|  | } SHRINK_VOLUME_REQUEST_TYPES; | 
|  |  | 
|  | typedef struct _SHRINK_VOLUME_INFORMATION { | 
|  | SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType; | 
|  | DWORDLONG                   Flags; | 
|  | LONGLONG                    NewNumberOfSectors; | 
|  | } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION; | 
|  |  | 
|  | #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001 | 
|  | #define TXFS_RM_FLAG_RENAME_RM 0x00000002 | 
|  | #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004 | 
|  | #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008 | 
|  | #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010 | 
|  | #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020 | 
|  | #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040 | 
|  | #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080 | 
|  | #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100 | 
|  | #define TXFS_RM_FLAG_GROW_LOG 0x00000400 | 
|  | #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800 | 
|  | #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000 | 
|  | #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000 | 
|  | #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000 | 
|  | #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000 | 
|  | #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000 | 
|  | #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000 | 
|  |  | 
|  | #define TXFS_LOGGING_MODE_SIMPLE 1 | 
|  | #define TXFS_LOGGING_MODE_FULL 2 | 
|  |  | 
|  | #define TXFS_TRANSACTION_STATE_NONE      0 | 
|  | #define TXFS_TRANSACTION_STATE_ACTIVE    1 | 
|  | #define TXFS_TRANSACTION_STATE_PREPARED  2 | 
|  | #define TXFS_TRANSACTION_STATE_NOTACTIVE 3 | 
|  |  | 
|  | #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE                        | \ | 
|  | TXFS_RM_FLAG_RENAME_RM                           | \ | 
|  | TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX             | \ | 
|  | TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN             | \ | 
|  | TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ | 
|  | TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        | \ | 
|  | TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          | \ | 
|  | TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          | \ | 
|  | TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN          | \ | 
|  | TXFS_RM_FLAG_SHRINK_LOG                          | \ | 
|  | TXFS_RM_FLAG_GROW_LOG                            | \ | 
|  | TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE                | \ | 
|  | TXFS_RM_FLAG_PRESERVE_CHANGES                    | \ | 
|  | TXFS_RM_FLAG_RESET_RM_AT_NEXT_START              | \ | 
|  | TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START       | \ | 
|  | TXFS_RM_FLAG_PREFER_CONSISTENCY                  | \ | 
|  | TXFS_RM_FLAG_PREFER_AVAILABILITY) | 
|  |  | 
|  | typedef struct _TXFS_MODIFY_RM { | 
|  | ULONG     Flags; | 
|  | ULONG     LogContainerCountMax; | 
|  | ULONG     LogContainerCountMin; | 
|  | ULONG     LogContainerCount; | 
|  | ULONG     LogGrowthIncrement; | 
|  | ULONG     LogAutoShrinkPercentage; | 
|  | ULONGLONG Reserved; | 
|  | USHORT    LoggingMode; | 
|  | } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM; | 
|  |  | 
|  | #define TXFS_RM_STATE_NOT_STARTED 0 | 
|  | #define TXFS_RM_STATE_STARTING 1 | 
|  | #define TXFS_RM_STATE_ACTIVE 3 | 
|  | #define TXFS_RM_STATE_SHUTTING_DOWN 4 | 
|  |  | 
|  | #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS                           \ | 
|  | (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS   |   \ | 
|  | TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT          |   \ | 
|  | TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX            |   \ | 
|  | TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN            |   \ | 
|  | TXFS_RM_FLAG_RESET_RM_AT_NEXT_START                |   \ | 
|  | TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START         |   \ | 
|  | TXFS_RM_FLAG_PREFER_CONSISTENCY                    |   \ | 
|  | TXFS_RM_FLAG_PREFER_AVAILABILITY) | 
|  |  | 
|  | typedef struct _TXFS_QUERY_RM_INFORMATION { | 
|  | ULONG         BytesRequired; | 
|  | ULONGLONG     TailLsn; | 
|  | ULONGLONG     CurrentLsn; | 
|  | ULONGLONG     ArchiveTailLsn; | 
|  | ULONGLONG     LogContainerSize; | 
|  | LARGE_INTEGER HighestVirtualClock; | 
|  | ULONG         LogContainerCount; | 
|  | ULONG         LogContainerCountMax; | 
|  | ULONG         LogContainerCountMin; | 
|  | ULONG         LogGrowthIncrement; | 
|  | ULONG         LogAutoShrinkPercentage; | 
|  | ULONG         Flags; | 
|  | USHORT        LoggingMode; | 
|  | USHORT        Reserved; | 
|  | ULONG         RmState; | 
|  | ULONGLONG     LogCapacity; | 
|  | ULONGLONG     LogFree; | 
|  | ULONGLONG     TopsSize; | 
|  | ULONGLONG     TopsUsed; | 
|  | ULONGLONG     TransactionCount; | 
|  | ULONGLONG     OnePCCount; | 
|  | ULONGLONG     TwoPCCount; | 
|  | ULONGLONG     NumberLogFileFull; | 
|  | ULONGLONG     OldestTransactionAge; | 
|  | GUID          RMName; | 
|  | ULONG         TmLogPathOffset; | 
|  | } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION; | 
|  |  | 
|  | #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01 | 
|  | #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02 | 
|  |  | 
|  | #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS                               \ | 
|  | (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN |         \ | 
|  | TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK) | 
|  |  | 
|  | typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION { | 
|  | LARGE_INTEGER LastVirtualClock; | 
|  | ULONGLONG     LastRedoLsn; | 
|  | ULONGLONG     HighestRecoveryLsn; | 
|  | ULONG         Flags; | 
|  | } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION; | 
|  |  | 
|  | #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001 | 
|  | #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002 | 
|  | #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004 | 
|  | #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008 | 
|  | #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010 | 
|  | #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020 | 
|  | #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040 | 
|  | #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080 | 
|  | #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200 | 
|  | #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400 | 
|  | #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800 | 
|  | #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000 | 
|  | #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000 | 
|  |  | 
|  | #define TXFS_START_RM_VALID_FLAGS                                           \ | 
|  | (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX             |   \ | 
|  | TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN             |   \ | 
|  | TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE                  |   \ | 
|  | TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS |   \ | 
|  | TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        |   \ | 
|  | TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          |   \ | 
|  | TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT                 |   \ | 
|  | TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          |   \ | 
|  | TXFS_START_RM_FLAG_LOGGING_MODE                        |   \ | 
|  | TXFS_START_RM_FLAG_PRESERVE_CHANGES                    |   \ | 
|  | TXFS_START_RM_FLAG_PREFER_CONSISTENCY                  |   \ | 
|  | TXFS_START_RM_FLAG_PREFER_AVAILABILITY) | 
|  |  | 
|  | typedef struct _TXFS_START_RM_INFORMATION { | 
|  | ULONG     Flags; | 
|  | ULONGLONG LogContainerSize; | 
|  | ULONG     LogContainerCountMin; | 
|  | ULONG     LogContainerCountMax; | 
|  | ULONG     LogGrowthIncrement; | 
|  | ULONG     LogAutoShrinkPercentage; | 
|  | ULONG     TmLogPathOffset; | 
|  | USHORT    TmLogPathLength; | 
|  | USHORT    LoggingMode; | 
|  | USHORT    LogPathLength; | 
|  | USHORT    Reserved; | 
|  | WCHAR     LogPath[1]; | 
|  | } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION; | 
|  |  | 
|  | typedef struct _TXFS_GET_METADATA_INFO_OUT { | 
|  | struct { | 
|  | LONGLONG LowPart; | 
|  | LONGLONG HighPart; | 
|  | } TxfFileId; | 
|  | GUID      LockingTransaction; | 
|  | ULONGLONG LastLsn; | 
|  | ULONG     TransactionState; | 
|  | } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT; | 
|  |  | 
|  | #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001 | 
|  | #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x000000012 | 
|  |  | 
|  | typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY { | 
|  | ULONGLONG Offset; | 
|  | ULONG     NameFlags; | 
|  | LONGLONG  FileId; | 
|  | ULONG     Reserved1; | 
|  | ULONG     Reserved2; | 
|  | LONGLONG  Reserved3; | 
|  | WCHAR     FileName[1]; | 
|  | } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY; | 
|  |  | 
|  | typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES { | 
|  | GUID      KtmTransaction; | 
|  | ULONGLONG NumberOfFiles; | 
|  | ULONGLONG BufferSizeRequired; | 
|  | ULONGLONG Offset; | 
|  | } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES; | 
|  |  | 
|  | typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY { | 
|  | GUID     TransactionId; | 
|  | ULONG    TransactionState; | 
|  | ULONG    Reserved1; | 
|  | ULONG    Reserved2; | 
|  | LONGLONG Reserved3; | 
|  | } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY; | 
|  |  | 
|  | typedef struct _TXFS_LIST_TRANSACTIONS { | 
|  | ULONGLONG NumberOfTransactions; | 
|  | ULONGLONG BufferSizeRequired; | 
|  | } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS; | 
|  |  | 
|  | typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT { | 
|  | __C89_NAMELESS union { | 
|  | ULONG BufferLength; | 
|  | UCHAR Buffer; | 
|  | } DUMMYUNIONNAME; | 
|  | } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT; | 
|  |  | 
|  | typedef struct _TXFS_WRITE_BACKUP_INFORMATION { | 
|  | UCHAR Buffer; | 
|  | } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION; | 
|  |  | 
|  | #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE | 
|  | #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF | 
|  |  | 
|  | typedef struct _TXFS_GET_TRANSACTED_VERSION { | 
|  | ULONG  ThisBaseVersion; | 
|  | ULONG  LatestVersion; | 
|  | USHORT ThisMiniVersion; | 
|  | USHORT FirstMiniVersion; | 
|  | USHORT LatestMiniVersion; | 
|  | } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION; | 
|  |  | 
|  | #define TXFS_SAVEPOINT_SET 1 | 
|  | #define TXFS_SAVEPOINT_ROLLBACK 2 | 
|  | #define TXFS_SAVEPOINT_CLEAR 4 | 
|  | #define TXFS_SAVEPOINT_CLEAR_ALL 16 | 
|  |  | 
|  | typedef struct _TXFS_SAVEPOINT_INFORMATION { | 
|  | HANDLE KtmTransaction; | 
|  | ULONG  ActionCode; | 
|  | ULONG  SavepointId; | 
|  | } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION; | 
|  |  | 
|  | typedef struct _TXFS_CREATE_MINIVERSION_INFO { | 
|  | USHORT StructureVersion; | 
|  | USHORT StructureLength; | 
|  | ULONG  BaseVersion; | 
|  | USHORT MiniVersion; | 
|  | } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO; | 
|  |  | 
|  | typedef struct _TXFS_TRANSACTION_ACTIVE_INFO { | 
|  | WINBOOL TransactionsActiveAtSnapshot; | 
|  | } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO; | 
|  |  | 
|  | typedef enum _WRITE_CACHE_TYPE { | 
|  | WriteCacheTypeUnknown        = 0, | 
|  | WriteCacheTypeNone           = 1, | 
|  | WriteCacheTypeWriteBack      = 2, | 
|  | WriteCacheTypeWriteThrough   = 3 | 
|  | } WRITE_CACHE_TYPE; | 
|  |  | 
|  | typedef enum _WRITE_CACHE_ENABLE { | 
|  | WriteCacheEnableUnknown   = 0, | 
|  | WriteCacheDisabled        = 1, | 
|  | WriteCacheEnabled         = 2 | 
|  | } WRITE_CACHE_ENABLE; | 
|  |  | 
|  | typedef enum _WRITE_CACHE_CHANGE { | 
|  | WriteCacheChangeUnknown   = 0, | 
|  | WriteCacheNotChangeable   = 1, | 
|  | WriteCacheChangeable      = 2 | 
|  | } WRITE_CACHE_CHANGE; | 
|  |  | 
|  | typedef enum _WRITE_THROUGH { | 
|  | WriteThroughUnknown        = 0, | 
|  | WriteThroughNotSupported   = 1, | 
|  | WriteThroughSupported      = 2 | 
|  | } WRITE_THROUGH; | 
|  |  | 
|  | typedef struct _STORAGE_WRITE_CACHE_PROPERTY { | 
|  | DWORD              Version; | 
|  | DWORD              Size; | 
|  | WRITE_CACHE_TYPE   WriteCacheType; | 
|  | WRITE_CACHE_ENABLE WriteCacheEnabled; | 
|  | WRITE_CACHE_CHANGE WriteCacheChangeable; | 
|  | WRITE_THROUGH      WriteThroughSupported; | 
|  | BOOLEAN            FlushCacheSupported; | 
|  | BOOLEAN            UserDefinedPowerProtection; | 
|  | BOOLEAN            NVCacheEnabled; | 
|  | } STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY; | 
|  |  | 
|  | typedef enum _STORAGE_PORT_CODE_SET { | 
|  | StoragePortCodeSetReserved   = 0, | 
|  | StoragePortCodeSetStorport   = 1, | 
|  | StoragePortCodeSetSCSIport   = 2 | 
|  | } STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET; | 
|  |  | 
|  | typedef struct _STORAGE_MINIPORT_DESCRIPTOR { | 
|  | DWORD                 Version; | 
|  | DWORD                 Size; | 
|  | STORAGE_PORT_CODE_SET Portdriver; | 
|  | BOOLEAN               LUNResetSupported; | 
|  | BOOLEAN               TargetResetSupported; | 
|  | } STORAGE_MINIPORT_DESCRIPTOR, *PSTORAGE_MINIPORT_DESCRIPTOR; | 
|  |  | 
|  | typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR { | 
|  | DWORD Version; | 
|  | DWORD Size; | 
|  | DWORD BytesPerCacheLine; | 
|  | DWORD BytesOffsetForCacheAlignment; | 
|  | DWORD BytesPerLogicalSector; | 
|  | DWORD BytesPerPhysicalSector; | 
|  | DWORD BytesOffsetForSectorAlignment; | 
|  | } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR; | 
|  | #endif /*(_WIN32_WINNT >= 0x0600)*/ | 
|  |  | 
|  | #if (_WIN32_WINNT >= 0x0601) | 
|  | typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR { | 
|  | DWORD   Version; | 
|  | DWORD   Size; | 
|  | BOOLEAN IncursSeekPenalty; | 
|  | } DEVICE_SEEK_PENALTY_DESCRIPTOR, *PDEVICE_SEEK_PENALTY_DESCRIPTOR; | 
|  |  | 
|  | typedef struct _DEVICE_TRIM_DESCRIPTOR { | 
|  | DWORD   Version; | 
|  | DWORD   Size; | 
|  | BOOLEAN TrimEnabled; | 
|  | } DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR; | 
|  |  | 
|  | typedef struct _REQUEST_OPLOCK_INPUT_BUFFER { | 
|  | WORD  StructureVersion; | 
|  | WORD  StructureLength; | 
|  | DWORD RequestedOplockLevel; | 
|  | DWORD Flags; | 
|  | } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER; | 
|  |  | 
|  | typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER { | 
|  | WORD        StructureVersion; | 
|  | WORD        StructureLength; | 
|  | DWORD       OriginalOplockLevel; | 
|  | DWORD       NewOplockLevel; | 
|  | DWORD       Flags; | 
|  | ACCESS_MASK AccessMode; | 
|  | WORD        ShareMode; | 
|  | } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER; | 
|  |  | 
|  | typedef struct _BOOT_AREA_INFO { | 
|  | ULONG BootSectorCount; | 
|  | struct { | 
|  | LARGE_INTEGER Offset; | 
|  | } BootSectors[2]; | 
|  | } BOOT_AREA_INFO, *PBOOT_AREA_INFO; | 
|  |  | 
|  | typedef struct _RETRIEVAL_POINTER_BASE { | 
|  | LARGE_INTEGER FileAreaOffset; | 
|  | } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE; | 
|  |  | 
|  | typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION { | 
|  | CHAR FileSystem[9]; | 
|  | } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION; | 
|  |  | 
|  | typedef struct _FILE_SYSTEM_RECOGNITION_STRUCTURE { | 
|  | UCHAR  Jmp[3]; | 
|  | UCHAR  FsName[8]; | 
|  | UCHAR  MustBeZero[5]; | 
|  | ULONG  Identifier; | 
|  | USHORT Length; | 
|  | USHORT Checksum; | 
|  | } FILE_SYSTEM_RECOGNITION_STRUCTURE; | 
|  |  | 
|  | typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT { | 
|  | DWORD         Flags; | 
|  | DWORD         NumberOfClusters; | 
|  | LARGE_INTEGER Cluster[1]; | 
|  | } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT; | 
|  |  | 
|  | typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT { | 
|  | DWORD Offset; | 
|  | DWORD NumberOfMatches; | 
|  | DWORD BufferSizeRequired; | 
|  | } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT; | 
|  |  | 
|  | typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY { | 
|  | DWORD         OffsetToNext; | 
|  | DWORD         Flags; | 
|  | LARGE_INTEGER Reserved; | 
|  | LARGE_INTEGER Cluster; | 
|  | WCHAR         FileName[1]; | 
|  | } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY; | 
|  |  | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000 | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001 | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002 | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004 | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008 | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000 | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000 | 
|  | #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000 | 
|  |  | 
|  | #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,124, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,125, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM,127, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,128, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,129, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,140, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,141, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,144,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,147, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,148, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  |  | 
|  | #endif /*(_WIN32_WINNT >= 0x0601)*/ | 
|  |  | 
|  | #endif /* _FILESYSTEMFSCTL_ */ | 
|  |  | 
|  |  | 
|  | #define IOCTL_VOLUME_BASE ((DWORD) 'V') | 
|  |  | 
|  | #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS CTL_CODE(IOCTL_VOLUME_BASE,0,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,1,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_ONLINE                  CTL_CODE(IOCTL_VOLUME_BASE,2,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_VOLUME_OFFLINE                 CTL_CODE(IOCTL_VOLUME_BASE,3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS) | 
|  | #define IOCTL_VOLUME_IS_OFFLINE              CTL_CODE(IOCTL_VOLUME_BASE,4,METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_IS_IO_CAPABLE           CTL_CODE(IOCTL_VOLUME_BASE,5,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_QUERY_FAILOVER_SET      CTL_CODE(IOCTL_VOLUME_BASE,6,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_QUERY_VOLUME_NUMBER     CTL_CODE(IOCTL_VOLUME_BASE,7,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL     CTL_CODE(IOCTL_VOLUME_BASE,8,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL     CTL_CODE(IOCTL_VOLUME_BASE,9,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_IS_CLUSTERED            CTL_CODE(IOCTL_VOLUME_BASE,12,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  | #define IOCTL_VOLUME_GET_GPT_ATTRIBUTES      CTL_CODE(IOCTL_VOLUME_BASE,14,METHOD_BUFFERED,FILE_ANY_ACCESS) | 
|  |  | 
|  | typedef struct _DISK_EXTENT { | 
|  | DWORD DiskNumber; | 
|  | LARGE_INTEGER StartingOffset; | 
|  | LARGE_INTEGER ExtentLength; | 
|  | } DISK_EXTENT,*PDISK_EXTENT; | 
|  |  | 
|  | typedef struct _VOLUME_DISK_EXTENTS { | 
|  | DWORD NumberOfDiskExtents; | 
|  | DISK_EXTENT Extents[1]; | 
|  | } VOLUME_DISK_EXTENTS,*PVOLUME_DISK_EXTENTS; | 
|  |  | 
|  | #endif /* _WINIOCTL_ */ | 
|  |  |