Add some vista/7 control codes.

git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@3648 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/include/winioctl.h b/mingw-w64-headers/include/winioctl.h
index be13cd6..7a7f382 100644
--- a/mingw-w64-headers/include/winioctl.h
+++ b/mingw-w64-headers/include/winioctl.h
@@ -163,6 +163,35 @@
 #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)
 
+#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) != 0L))
+
+#define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE 0x00000001L
+
+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;
@@ -299,20 +328,29 @@
 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
 
   typedef enum _STORAGE_BUS_TYPE {
-    BusTypeUnknown	= 0x00,
-    BusTypeScsi,
-    BusTypeAtapi,
-    BusTypeAta,
-    BusType1394,
-    BusTypeSsa,
-    BusTypeFibre,
-    BusTypeUsb,
-    BusTypeRAID,
-    BusTypeiScsi,
-    BusTypeSas,
-    BusTypeSata,
-    BusTypeMaxReserved	= 0x7F
-  } STORAGE_BUS_TYPE,*PSTORAGE_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 {
@@ -410,6 +448,7 @@
 #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)
@@ -420,6 +459,7 @@
 #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
@@ -1454,6 +1494,8 @@
 #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;
@@ -1676,7 +1718,118 @@
 #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;
@@ -1969,15 +2122,188 @@
   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_IS_CLUSTERED CTL_CODE(IOCTL_VOLUME_BASE,12,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;