#ifndef MOUNTMGR_H #define MOUNTMGR_H /* This is a subset of mountmgr.h from the WDK (Windows Driver Kit) * included to make it easier to compile the application separately * without installing the WDK. */ #define MOUNTMGRCONTROLTYPE 0x0000006D // 'm' #define MOUNTDEVCONTROLTYPE 0x0000004D // 'M' // // These are the IOCTLs supported by the mount point manager. // #define IOCTL_MOUNTMGR_CREATE_POINT CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_MOUNTMGR_DELETE_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_MOUNTMGR_QUERY_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS) // // Input structure for IOCTL_MOUNTMGR_CREATE_POINT. // typedef struct _MOUNTMGR_CREATE_POINT_INPUT { USHORT SymbolicLinkNameOffset; USHORT SymbolicLinkNameLength; USHORT DeviceNameOffset; USHORT DeviceNameLength; } MOUNTMGR_CREATE_POINT_INPUT, * PMOUNTMGR_CREATE_POINT_INPUT; // // Input structure for IOCTL_MOUNTMGR_DELETE_POINTS, // IOCTL_MOUNTMGR_QUERY_POINTS, and IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY. // typedef struct _MOUNTMGR_MOUNT_POINT { ULONG SymbolicLinkNameOffset; USHORT SymbolicLinkNameLength; USHORT Reserved1; ULONG UniqueIdOffset; USHORT UniqueIdLength; USHORT Reserved2; ULONG DeviceNameOffset; USHORT DeviceNameLength; USHORT Reserved3; } MOUNTMGR_MOUNT_POINT, * PMOUNTMGR_MOUNT_POINT; // // Output structure for IOCTL_MOUNTMGR_DELETE_POINTS, // IOCTL_MOUNTMGR_QUERY_POINTS, and IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY. // typedef struct _MOUNTMGR_MOUNT_POINTS { ULONG Size; ULONG NumberOfMountPoints; MOUNTMGR_MOUNT_POINT MountPoints[1]; } MOUNTMGR_MOUNT_POINTS, * PMOUNTMGR_MOUNT_POINTS; // // Input structure for IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE, // IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION, // IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH, and // IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS. // IOCTL_MOUNTMGR_PREPARE_VOLUME_DELETE // IOCTL_MOUNTMGR_CANCEL_VOLUME_DELETE // typedef struct _MOUNTMGR_TARGET_NAME { USHORT DeviceNameLength; WCHAR DeviceName[1]; } MOUNTMGR_TARGET_NAME, * PMOUNTMGR_TARGET_NAME; // // Macro that defines what a "drive letter" mount point is. This macro can // be used to scan the result from QUERY_POINTS to discover which mount points // are find "drive letter" mount points. // #define MOUNTMGR_IS_DRIVE_LETTER(s) ( \ (s)->Length == 28 && \ (s)->Buffer[0] == '\\' && \ (s)->Buffer[1] == 'D' && \ (s)->Buffer[2] == 'o' && \ (s)->Buffer[3] == 's' && \ (s)->Buffer[4] == 'D' && \ (s)->Buffer[5] == 'e' && \ (s)->Buffer[6] == 'v' && \ (s)->Buffer[7] == 'i' && \ (s)->Buffer[8] == 'c' && \ (s)->Buffer[9] == 'e' && \ (s)->Buffer[10] == 's' && \ (s)->Buffer[11] == '\\' && \ (s)->Buffer[12] >= 'A' && \ (s)->Buffer[12] <= 'Z' && \ (s)->Buffer[13] == ':') #endif /* MOUNTMGR_H */