4
#if (NTDDI_VERSION >= NTDDI_WIN2K)
6
#if defined(DEFINE_GUID)
5
7
DEFINE_GUID(MOUNTDEV_MOUNTED_DEVICE_GUID, 0x53F5630D, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B);
7
10
#define MOUNTMGR_DEVICE_NAME L"\\Device\\MountPointManager"
8
11
#define MOUNTMGR_DOS_DEVICE_NAME L"\\\\.\\MountPointManager"
9
12
#define MOUNTMGRCONTROLTYPE ((ULONG) 'm')
10
13
#define MOUNTDEVCONTROLTYPE ((ULONG) 'M')
12
#define IOCTL_MOUNTMGR_CREATE_POINT \
13
CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
15
#define IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 32, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
16
#define IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 33, METHOD_BUFFERED, FILE_READ_ACCESS)
18
struct mountmgr_unix_drive {
22
USHORT mount_point_offset;
26
#define IOCTL_MOUNTMGR_CREATE_POINT \
27
CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
14
28
#define IOCTL_MOUNTMGR_DELETE_POINTS \
15
CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
29
CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
16
30
#define IOCTL_MOUNTMGR_QUERY_POINTS \
17
CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
31
CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
18
32
#define IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY \
19
CTL_CODE(MOUNTMGRCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
33
CTL_CODE(MOUNTMGRCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
20
34
#define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER \
21
CTL_CODE(MOUNTMGRCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
35
CTL_CODE(MOUNTMGRCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
22
36
#define IOCTL_MOUNTMGR_AUTO_DL_ASSIGNMENTS \
23
CTL_CODE(MOUNTMGRCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
37
CTL_CODE(MOUNTMGRCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
24
38
#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED \
25
CTL_CODE(MOUNTMGRCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
39
CTL_CODE(MOUNTMGRCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
26
40
#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED \
27
CTL_CODE(MOUNTMGRCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
41
CTL_CODE(MOUNTMGRCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
28
42
#define IOCTL_MOUNTMGR_CHANGE_NOTIFY \
29
CTL_CODE(MOUNTMGRCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
43
CTL_CODE(MOUNTMGRCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
30
44
#define IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE \
31
CTL_CODE(MOUNTMGRCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
45
CTL_CODE(MOUNTMGRCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
32
46
#define IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES \
33
CTL_CODE(MOUNTMGRCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
47
CTL_CODE(MOUNTMGRCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
34
48
#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION \
35
CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
36
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH \
37
CTL_CODE(MOUNTMGRCONTROLTYPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
38
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS \
39
CTL_CODE(MOUNTMGRCONTROLTYPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
49
CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
40
50
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME \
41
CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
43
typedef struct _MOUNTDEV_NAME
47
} MOUNTDEV_NAME, *PMOUNTDEV_NAME;
49
typedef struct _MOUNTMGR_MOUNT_POINT
51
ULONG SymbolicLinkNameOffset;
52
USHORT SymbolicLinkNameLength;
54
USHORT UniqueIdLength;
55
ULONG DeviceNameOffset;
56
USHORT DeviceNameLength;
51
CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
53
#define MOUNTMGR_IS_DRIVE_LETTER(s) \
54
((s)->Length == 28 && (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D' && \
55
(s)->Buffer[2] == 'o' && (s)->Buffer[3] == 's' && (s)->Buffer[4] == 'D' && \
56
(s)->Buffer[5] == 'e' && \ (s)->Buffer[6] == 'v' && (s)->Buffer[7] == 'i' && \
57
(s)->Buffer[8] == 'c' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == 's' && \
58
(s)->Buffer[11] == '\\' && (s)->Buffer[12] >= 'A' && \
59
(s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':')
61
#define MOUNTMGR_IS_VOLUME_NAME(s) \
62
(((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \
63
(s)->Buffer[0] == '\\'&& ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \
64
(s)->Buffer[2] == '?' && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V' && \
65
(s)->Buffer[5] == 'o' && (s)->Buffer[6] == 'l' && (s)->Buffer[7] == 'u' && \
66
(s)->Buffer[8] == 'm' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == '{' && \
67
(s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-' && \
68
(s)->Buffer[34] == '-' && (s)->Buffer[47] == '}')
70
typedef struct _MOUNTMGR_CREATE_POINT_INPUT {
71
USHORT SymbolicLinkNameOffset;
72
USHORT SymbolicLinkNameLength;
73
USHORT DeviceNameOffset;
74
USHORT DeviceNameLength;
75
} MOUNTMGR_CREATE_POINT_INPUT, *PMOUNTMGR_CREATE_POINT_INPUT;
77
typedef struct _MOUNTMGR_MOUNT_POINT {
78
ULONG SymbolicLinkNameOffset;
79
USHORT SymbolicLinkNameLength;
81
USHORT UniqueIdLength;
82
ULONG DeviceNameOffset;
83
USHORT DeviceNameLength;
57
84
} MOUNTMGR_MOUNT_POINT, *PMOUNTMGR_MOUNT_POINT;
59
typedef struct _MOUNTMGR_CREATE_POINT_INPUT
61
USHORT SymbolicLinkNameOffset;
62
USHORT SymbolicLinkNameLength;
63
USHORT DeviceNameOffset;
64
USHORT DeviceNameLength;
65
} MOUNTMGR_CREATE_POINT_INPUT, *PMOUNTMGR_CREATE_POINT_INPUT;
67
typedef struct _MOUNTMGR_MOUNT_POINTS
70
ULONG NumberOfMountPoints;
71
MOUNTMGR_MOUNT_POINT MountPoints[1];
86
typedef struct _MOUNTMGR_MOUNT_POINTS {
88
ULONG NumberOfMountPoints;
89
MOUNTMGR_MOUNT_POINT MountPoints[1];
72
90
} MOUNTMGR_MOUNT_POINTS, *PMOUNTMGR_MOUNT_POINTS;
74
typedef struct _MOUNTMGR_DRIVE_LETTER_INFORMATION
76
BOOLEAN DriveLetterWasAssigned;
77
UCHAR CurrentDriveLetter;
92
typedef struct _MOUNTMGR_DRIVE_LETTER_TARGET {
93
USHORT DeviceNameLength;
95
} MOUNTMGR_DRIVE_LETTER_TARGET, *PMOUNTMGR_DRIVE_LETTER_TARGET;
97
typedef struct _MOUNTMGR_DRIVE_LETTER_INFORMATION {
98
BOOLEAN DriveLetterWasAssigned;
99
UCHAR CurrentDriveLetter;
78
100
} MOUNTMGR_DRIVE_LETTER_INFORMATION, *PMOUNTMGR_DRIVE_LETTER_INFORMATION;
80
typedef struct _MOUNTMGR_DRIVE_LETTER_TARGET
82
USHORT DeviceNameLength;
84
} MOUNTMGR_DRIVE_LETTER_TARGET, *PMOUNTMGR_DRIVE_LETTER_TARGET;
102
typedef struct _MOUNTMGR_VOLUME_MOUNT_POINT {
103
USHORT SourceVolumeNameOffset;
104
USHORT SourceVolumeNameLength;
105
USHORT TargetVolumeNameOffset;
106
USHORT TargetVolumeNameLength;
107
} MOUNTMGR_VOLUME_MOUNT_POINT, *PMOUNTMGR_VOLUME_MOUNT_POINT;
86
109
typedef struct _MOUNTMGR_CHANGE_NOTIFY_INFO {
88
111
} MOUNTMGR_CHANGE_NOTIFY_INFO, *PMOUNTMGR_CHANGE_NOTIFY_INFO;
90
typedef struct _MOUNTMGR_VOLUME_MOUNT_POINT
92
USHORT SourceVolumeNameOffset;
93
USHORT SourceVolumeNameLength;
94
USHORT TargetVolumeNameOffset;
95
USHORT TargetVolumeNameLength;
96
} MOUNTMGR_VOLUME_MOUNT_POINT, *PMOUNTMGR_VOLUME_MOUNT_POINT;
98
typedef struct _MOUNTMGR_TARGET_NAME
100
USHORT DeviceNameLength;
113
typedef struct _MOUNTMGR_TARGET_NAME {
114
USHORT DeviceNameLength;
102
116
} MOUNTMGR_TARGET_NAME, *PMOUNTMGR_TARGET_NAME;
104
typedef struct _MOUNTMGR_VOLUME_PATHS
118
typedef struct _MOUNTDEV_NAME {
121
} MOUNTDEV_NAME, *PMOUNTDEV_NAME;
123
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
125
#if (NTDDI_VERSION >= NTDDI_WINXP)
127
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH \
128
CTL_CODE(MOUNTMGRCONTROLTYPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
129
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS \
130
CTL_CODE(MOUNTMGRCONTROLTYPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
132
#define MOUNTMGR_IS_DOS_VOLUME_NAME(s) \
133
(MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '\\')
134
#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s) \
135
(MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '\\')
136
#define MOUNTMGR_IS_NT_VOLUME_NAME(s) \
137
( MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '?')
138
#define MOUNTMGR_IS_NT_VOLUME_NAME_WB(s) \
139
(MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '?')
141
typedef struct _MOUNTMGR_VOLUME_PATHS {
108
144
} MOUNTMGR_VOLUME_PATHS, *PMOUNTMGR_VOLUME_PATHS;
110
#define MOUNTMGR_IS_DRIVE_LETTER(s) ((s)->Length == 28 && (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D' && \
111
(s)->Buffer[2] == 'o' && (s)->Buffer[3] == 's' && (s)->Buffer[4] == 'D' && \
112
(s)->Buffer[5] == 'e' && \ (s)->Buffer[6] == 'v' && (s)->Buffer[7] == 'i' && \
113
(s)->Buffer[8] == 'c' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == 's' && \
114
(s)->Buffer[11] == '\\' && (s)->Buffer[12] >= 'A' && \
115
(s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':')
117
#define MOUNTMGR_IS_VOLUME_NAME(s) (((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \
118
(s)->Buffer[0] == '\\'&& ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \
119
(s)->Buffer[2] == '?' && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V' && \
120
(s)->Buffer[5] == 'o' && (s)->Buffer[6] == 'l' && (s)->Buffer[7] == 'u' && \
121
(s)->Buffer[8] == 'm' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == '{' && \
122
(s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-' && \
123
(s)->Buffer[34] == '-' && (s)->Buffer[47] == '}')
125
#define MOUNTMGR_IS_DOS_VOLUME_NAME(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '\\')
126
#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '\\')
127
#define MOUNTMGR_IS_NT_VOLUME_NAME(s) ( MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '?')
128
#define MOUNTMGR_IS_NT_VOLUME_NAME_WB(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '?')
146
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
148
#if (NTDDI_VERSION >= NTDDI_WS03)
150
#define IOCTL_MOUNTMGR_SCRUB_REGISTRY \
151
CTL_CODE(MOUNTMGRCONTROLTYPE, 14, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
152
#define IOCTL_MOUNTMGR_QUERY_AUTO_MOUNT \
153
CTL_CODE(MOUNTMGRCONTROLTYPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
154
#define IOCTL_MOUNTMGR_SET_AUTO_MOUNT \
155
CTL_CODE(MOUNTMGRCONTROLTYPE, 16, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
157
typedef enum _MOUNTMGR_AUTO_MOUNT_STATE {
160
} MOUNTMGR_AUTO_MOUNT_STATE;
162
typedef struct _MOUNTMGR_QUERY_AUTO_MOUNT {
163
MOUNTMGR_AUTO_MOUNT_STATE CurrentState;
164
} MOUNTMGR_QUERY_AUTO_MOUNT, *PMOUNTMGR_QUERY_AUTO_MOUNT;
166
typedef struct _MOUNTMGR_SET_AUTO_MOUNT {
167
MOUNTMGR_AUTO_MOUNT_STATE NewState;
168
} MOUNTMGR_SET_AUTO_MOUNT, *PMOUNTMGR_SET_AUTO_MOUNT;
170
#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
172
#if (NTDDI_VERSION >= NTDDI_WIN7)
174
#define IOCTL_MOUNTMGR_BOOT_DL_ASSIGNMENT \
175
CTL_CODE(MOUNTMGRCONTROLTYPE, 17, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
176
#define IOCTL_MOUNTMGR_TRACELOG_CACHE \
177
CTL_CODE(MOUNTMGRCONTROLTYPE, 18, METHOD_BUFFERED, FILE_READ_ACCESS)
179
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
181
#endif /* _MOUNTMGR_ */