3 * Copyright 2012, 2013 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */
27 #pragma GCC system_header
31 * Volume IOCTL interface.
40 #define IOCTL_VOLUME_BASE ((ULONG) 'V')
42 #define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL \
43 CTL_CODE(IOCTL_VOLUME_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
45 #define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL \
46 CTL_CODE(IOCTL_VOLUME_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
48 #define IOCTL_VOLUME_READ_PLEX \
49 CTL_CODE(IOCTL_VOLUME_BASE, 11, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
51 #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS \
52 CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
54 #define IOCTL_VOLUME_IS_CLUSTERED \
55 CTL_CODE(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
57 #define IOCTL_VOLUME_QUERY_VOLUME_NUMBER \
58 CTL_CODE(IOCTL_VOLUME_BASE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
60 #define IOCTL_VOLUME_IS_PARTITION \
61 CTL_CODE(IOCTL_VOLUME_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
63 #define IOCTL_VOLUME_SET_GPT_ATTRIBUTES \
64 CTL_CODE(IOCTL_VOLUME_BASE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
66 #define IOCTL_VOLUME_GET_GPT_ATTRIBUTES \
67 CTL_CODE(IOCTL_VOLUME_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
69 #define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE \
70 CTL_CODE(IOCTL_VOLUME_BASE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
72 #define IOCTL_VOLUME_ONLINE \
73 CTL_CODE(IOCTL_VOLUME_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
75 #define IOCTL_VOLUME_OFFLINE \
76 CTL_CODE(IOCTL_VOLUME_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
78 #define IOCTL_VOLUME_IS_OFFLINE \
79 CTL_CODE(IOCTL_VOLUME_BASE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
81 #define IOCTL_VOLUME_IS_IO_CAPABLE \
82 CTL_CODE(IOCTL_VOLUME_BASE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
84 #define IOCTL_VOLUME_QUERY_FAILOVER_SET \
85 CTL_CODE(IOCTL_VOLUME_BASE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
88 typedef struct _VOLUME_LOGICAL_OFFSET {
89 LONGLONG LogicalOffset;
90 } VOLUME_LOGICAL_OFFSET, *PVOLUME_LOGICAL_OFFSET;
92 typedef struct _VOLUME_PHYSICAL_OFFSET {
95 } VOLUME_PHYSICAL_OFFSET, *PVOLUME_PHYSICAL_OFFSET;
97 typedef struct _VOLUME_PHYSICAL_OFFSETS {
98 ULONG NumberOfPhysicalOffsets;
99 VOLUME_PHYSICAL_OFFSET PhysicalOffset[1];
100 } VOLUME_PHYSICAL_OFFSETS, *PVOLUME_PHYSICAL_OFFSETS;
102 typedef struct _VOLUME_READ_PLEX_INPUT {
103 LARGE_INTEGER ByteOffset;
106 } VOLUME_READ_PLEX_INPUT, *PVOLUME_READ_PLEX_INPUT;
108 typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
109 ULONGLONG GptAttributes;
110 } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
112 typedef struct _VOLUME_SET_GPT_ATTRIBUTES_INFORMATION {
113 ULONGLONG GptAttributes;
114 BOOLEAN RevertOnClose;
115 BOOLEAN ApplyToAllConnectedVolumes;
118 } VOLUME_SET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_SET_GPT_ATTRIBUTES_INFORMATION;
120 typedef struct _DISK_EXTENT {
122 LARGE_INTEGER StartingOffset;
123 LARGE_INTEGER ExtentLength;
124 } DISK_EXTENT, *PDISK_EXTENT;
126 typedef struct _VOLUME_DISK_EXTENTS {
127 ULONG NumberOfDiskExtents;
128 DISK_EXTENT Extents[1];
129 } VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
131 typedef struct _VOLUME_NUMBER {
133 WCHAR VolumeManagerName[8];
134 } VOLUME_NUMBER, *PVOLUME_NUMBER;
136 typedef struct _VOLUME_FAILOVER_SET {
138 ULONG DiskNumbers[1];
139 } VOLUME_FAILOVER_SET, *PVOLUME_FAILOVER_SET;
145 #endif /* __NTDDVOL_H */