1 ////////////////////////////////////////////////////////////////////
2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
4 ////////////////////////////////////////////////////////////////////
7 Copyright (c) 1997-1999 Microsoft Corporation
15 This file defines the external mount point interface for administering
38 #define MOUNTMGR_DEVICE_NAME L"\\Device\\MountPointManager"
39 #define MOUNTMGR_DOS_DEVICE_NAME L"\\\\.\\MountPointManager"
41 #define MOUNTMGRCONTROLTYPE ((ULONG) 'm')
42 #define MOUNTDEVCONTROLTYPE ((ULONG) 'M')
45 // These are the IOCTLs supported by the mount point manager.
48 #define IOCTL_MOUNTMGR_CREATE_POINT CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
49 #define IOCTL_MOUNTMGR_DELETE_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
50 #define IOCTL_MOUNTMGR_QUERY_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
51 #define IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY CTL_CODE(MOUNTMGRCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
52 #define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER CTL_CODE(MOUNTMGRCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
53 #define IOCTL_MOUNTMGR_AUTO_DL_ASSIGNMENTS CTL_CODE(MOUNTMGRCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
54 #define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED CTL_CODE(MOUNTMGRCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
55 #define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED CTL_CODE(MOUNTMGRCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
56 #define IOCTL_MOUNTMGR_CHANGE_NOTIFY CTL_CODE(MOUNTMGRCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
57 #define IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE CTL_CODE(MOUNTMGRCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
58 #define IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES CTL_CODE(MOUNTMGRCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
59 #define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
62 // Input structure for IOCTL_MOUNTMGR_CREATE_POINT.
65 typedef struct _MOUNTMGR_CREATE_POINT_INPUT
{
66 USHORT SymbolicLinkNameOffset
;
67 USHORT SymbolicLinkNameLength
;
68 USHORT DeviceNameOffset
;
69 USHORT DeviceNameLength
;
70 } MOUNTMGR_CREATE_POINT_INPUT
, *PMOUNTMGR_CREATE_POINT_INPUT
;
73 // Input structure for IOCTL_MOUNTMGR_DELETE_POINTS,
74 // IOCTL_MOUNTMGR_QUERY_POINTS, and IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY.
77 typedef struct _MOUNTMGR_MOUNT_POINT
{
78 ULONG SymbolicLinkNameOffset
;
79 USHORT SymbolicLinkNameLength
;
81 USHORT UniqueIdLength
;
82 ULONG DeviceNameOffset
;
83 USHORT DeviceNameLength
;
84 } MOUNTMGR_MOUNT_POINT
, *PMOUNTMGR_MOUNT_POINT
;
87 // Output structure for IOCTL_MOUNTMGR_DELETE_POINTS,
88 // IOCTL_MOUNTMGR_QUERY_POINTS, and IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY.
91 typedef struct _MOUNTMGR_MOUNT_POINTS
{
93 ULONG NumberOfMountPoints
;
94 MOUNTMGR_MOUNT_POINT MountPoints
[1];
95 } MOUNTMGR_MOUNT_POINTS
, *PMOUNTMGR_MOUNT_POINTS
;
98 // Input structure for IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER.
101 typedef struct _MOUNTMGR_DRIVE_LETTER_TARGET
{
102 USHORT DeviceNameLength
;
104 } MOUNTMGR_DRIVE_LETTER_TARGET
, *PMOUNTMGR_DRIVE_LETTER_TARGET
;
107 // Output structure for IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER.
110 typedef struct _MOUNTMGR_DRIVE_LETTER_INFORMATION
{
111 BOOLEAN DriveLetterWasAssigned
;
112 UCHAR CurrentDriveLetter
;
113 } MOUNTMGR_DRIVE_LETTER_INFORMATION
, *PMOUNTMGR_DRIVE_LETTER_INFORMATION
;
116 // Input structure for IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED and
117 // IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED.
120 typedef struct _MOUNTMGR_VOLUME_MOUNT_POINT
{
121 USHORT SourceVolumeNameOffset
;
122 USHORT SourceVolumeNameLength
;
123 USHORT TargetVolumeNameOffset
;
124 USHORT TargetVolumeNameLength
;
125 } MOUNTMGR_VOLUME_MOUNT_POINT
, *PMOUNTMGR_VOLUME_MOUNT_POINT
;
128 // Input structure for IOCTL_MOUNTMGR_CHANGE_NOTIFY.
129 // Output structure for IOCTL_MOUNTMGR_CHANGE_NOTIFY.
132 typedef struct _MOUNTMGR_CHANGE_NOTIFY_INFO
{
134 } MOUNTMGR_CHANGE_NOTIFY_INFO
, *PMOUNTMGR_CHANGE_NOTIFY_INFO
;
137 // Input structure for IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE and
138 // IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION.
141 typedef struct _MOUNTMGR_TARGET_NAME
{
142 USHORT DeviceNameLength
;
144 } MOUNTMGR_TARGET_NAME
, *PMOUNTMGR_TARGET_NAME
;
147 // The following IOCTL is supported by mounted devices.
150 #define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
153 // Output structure for IOCTL_MOUNTDEV_QUERY_DEVICE_NAME.
156 typedef struct _MOUNTDEV_NAME
{
159 } MOUNTDEV_NAME
, *PMOUNTDEV_NAME
;
162 // Devices that wish to be mounted should report this GUID in
163 // IoRegisterDeviceInterface.
166 //DEFINE_GUID(MOUNTDEV_MOUNTED_DEVICE_GUID, 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);