mountmgr.h 7.5 KB

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