Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

348 lines
11 KiB

  1. /**********************************************************************/
  2. /** Microsoft Windows NT **/
  3. /** Copyright(c) Microsoft Corp., 1993 **/
  4. /**********************************************************************/
  5. /*
  6. ftpd.h
  7. This file contains constants & type definitions shared between the
  8. FTPD Service, Installer, and Administration UI.
  9. FILE HISTORY:
  10. KeithMo 10-Mar-1993 Created.
  11. */
  12. #ifndef _FTPD_H_
  13. #define _FTPD_H_
  14. #ifdef __cplusplus
  15. extern "C"
  16. {
  17. #endif // _cplusplus
  18. #if !defined(MIDL_PASS)
  19. #include <winsock.h>
  20. #endif
  21. //
  22. // Service name.
  23. //
  24. #define FTPD_SERVICE_NAME_A "FTPSVC"
  25. #define FTPD_SERVICE_NAME_W L"FTPSVC"
  26. //
  27. // Name of directory annotation file. If this file exists
  28. // in the target directory of a CWD command, its contents
  29. // will be sent to the user as part of the CWD reply.
  30. //
  31. #define FTPD_ANNOTATION_FILE_A "~FTPSVC~.CKM"
  32. #define FTPD_ANNOTATION_FILE_W L"~FTPSVC~.CKM"
  33. //
  34. // Name of the log file, used for logging file accesses.
  35. //
  36. #define FTPD_LOG_FILE_A "FTPSVC.LOG"
  37. #define FTPD_LOG_FILE_W L"FTPSVC.LOG"
  38. //
  39. // Configuration parameters registry key.
  40. //
  41. #define FTPD_PARAMETERS_KEY_A \
  42. "System\\CurrentControlSet\\Services\\FtpSvc\\Parameters"
  43. #define FTPD_PARAMETERS_KEY_W \
  44. L"System\\CurrentControlSet\\Services\\FtpSvc\\Parameters"
  45. //
  46. // Performance key.
  47. //
  48. #define FTPD_PERFORMANCE_KEY_A \
  49. "System\\CurrentControlSet\\Services\\FtpSvc\\Performance"
  50. #define FTPD_PERFORMANCE_KEY_W \
  51. L"System\\CurrentControlSet\\Services\\FtpSvc\\Performance"
  52. //
  53. // If this registry key exists under the FtpSvc\Parameters key,
  54. // it is used to validate FTPSVC access. Basically, all new users
  55. // must have sufficient privilege to open this key before they
  56. // may access the FTP Server.
  57. //
  58. #define FTPD_ACCESS_KEY_A "AccessCheck"
  59. #define FTPD_ACCESS_KEY_W L"AccessCheck"
  60. //
  61. // Configuration value names.
  62. //
  63. #define FTPD_ALLOW_ANONYMOUS_A "AllowAnonymous"
  64. #define FTPD_ALLOW_ANONYMOUS_W L"AllowAnonymous"
  65. #define FTPD_ALLOW_GUEST_ACCESS_A "AllowGuestAccess"
  66. #define FTPD_ALLOW_GUEST_ACCESS_W L"AllowGuestAccess"
  67. #define FTPD_ANONYMOUS_ONLY_A "AnonymousOnly"
  68. #define FTPD_ANONYMOUS_ONLY_W L"AnonymousOnly"
  69. #define FTPD_LOG_ANONYMOUS_A "LogAnonymous"
  70. #define FTPD_LOG_ANONYMOUS_W L"LogAnonymous"
  71. #define FTPD_LOG_NONANONYMOUS_A "LogNonAnonymous"
  72. #define FTPD_LOG_NONANONYMOUS_W L"LogNonAnonymous"
  73. #define FTPD_ANONYMOUS_USERNAME_A "AnonymousUserName"
  74. #define FTPD_ANONYMOUS_USERNAME_W L"AnonymousUserName"
  75. #define FTPD_HOME_DIRECTORY_A "HomeDirectory"
  76. #define FTPD_HOME_DIRECTORY_W L"HomeDirectory"
  77. #define FTPD_MAX_CONNECTIONS_A "MaxConnections"
  78. #define FTPD_MAX_CONNECTIONS_W L"MaxConnections"
  79. #define FTPD_READ_ACCESS_MASK_A "ReadAccessMask"
  80. #define FTPD_READ_ACCESS_MASK_W L"ReadAccessMask"
  81. #define FTPD_WRITE_ACCESS_MASK_A "WriteAccessMask"
  82. #define FTPD_WRITE_ACCESS_MASK_W L"WriteAccessMask"
  83. #define FTPD_CONNECTION_TIMEOUT_A "ConnectionTimeout"
  84. #define FTPD_CONNECTION_TIMEOUT_W L"ConnectionTimeout"
  85. #define FTPD_MSDOS_DIR_OUTPUT_A "MsdosDirOutput"
  86. #define FTPD_MSDOS_DIR_OUTPUT_W L"MsdosDirOutput"
  87. #define FTPD_GREETING_MESSAGE_A "GreetingMessage"
  88. #define FTPD_GREETING_MESSAGE_W L"GreetingMessage"
  89. #define FTPD_EXIT_MESSAGE_A "ExitMessage"
  90. #define FTPD_EXIT_MESSAGE_W L"ExitMessage"
  91. #define FTPD_MAX_CLIENTS_MSG_A "MaxClientsMessage"
  92. #define FTPD_MAX_CLIENTS_MSG_W L"MaxClientsMessage"
  93. #define FTPD_DEBUG_FLAGS_A "DebugFlags"
  94. #define FTPD_DEBUG_FLAGS_W L"DebugFlags"
  95. #define FTPD_ANNOTATE_DIRS_A "AnnotateDirectories"
  96. #define FTPD_ANNOTATE_DIRS_W L"AnnotateDirectories"
  97. #define FTPD_LOWERCASE_FILES_A "LowercaseFiles"
  98. #define FTPD_LOWERCASE_FILES_W L"LowercaseFiles"
  99. #define FTPD_LOG_FILE_ACCESS_A "LogFileAccess"
  100. #define FTPD_LOG_FILE_ACCESS_W L"LogFileAccess"
  101. #define FTPD_LOG_FILE_DIRECTORY_A "LogFileDirectory"
  102. #define FTPD_LOG_FILE_DIRECTORY_W L"LogFileDirectory"
  103. #define FTPD_LISTEN_BACKLOG_A "ListenBacklog"
  104. #define FTPD_LISTEN_BACKLOG_W L"ListenBacklog"
  105. #define FTPD_ENABLE_LICENSING_A "EnableLicensing"
  106. #define FTPD_ENABLE_LICENSING_W L"EnableLicensing"
  107. #define FTPD_DEFAULT_LOGON_DOMAIN_A "DefaultLogonDomain"
  108. #define FTPD_DEFAULT_LOGON_DOMAIN_W L"DefaultLogonDomain"
  109. #define FTPD_ENABLE_PORT_ATTACK_A "EnablePortAttack"
  110. #define FTPD_ENABLE_PORT_ATTACK_W L"EnablePortAttack"
  111. //
  112. // Name of the LSA Secret Object containing the password for
  113. // anonymous logon and virtual UNC roots
  114. //
  115. #define FTPD_ANONYMOUS_SECRET_A "FTPD_ANONYMOUS_DATA"
  116. #define FTPD_ANONYMOUS_SECRET_W L"FTPD_ANONYMOUS_DATA"
  117. #define FTPD_ROOT_SECRET_A "FTPD_ROOT_DATA"
  118. #define FTPD_ROOT_SECRET_W L"FTPD_ROOT_DATA"
  119. //
  120. // Handle ANSI/UNICODE sensitivity.
  121. //
  122. #ifdef UNICODE
  123. #define FTPD_SERVICE_NAME FTPD_SERVICE_NAME_W
  124. #define FTPD_ANNOTATION_FILE FTPD_ANNOTATION_FILE_W
  125. #define FTPD_PARAMETERS_KEY FTPD_PARAMETERS_KEY_W
  126. #define FTPD_PERFORMANCE_KEY FTPD_PERFORMANCE_KEY_W
  127. #define FTPD_ACCESS_KEY FTPD_ACCESS_KEY_W
  128. #define FTPD_ALLOW_ANONYMOUS FTPD_ALLOW_ANONYMOUS_W
  129. #define FTPD_ALLOW_GUEST_ACCESS FTPD_ALLOW_GUEST_ACCESS_W
  130. #define FTPD_ANONYMOUS_ONLY FTPD_ANONYMOUS_ONLY_W
  131. #define FTPD_LOG_ANONYMOUS FTPD_LOG_ANONYMOUS_W
  132. #define FTPD_LOG_NONANONYMOUS FTPD_LOG_NONANONYMOUS_W
  133. #define FTPD_ANONYMOUS_USERNAME FTPD_ANONYMOUS_USERNAME_W
  134. #define FTPD_HOME_DIRECTORY FTPD_HOME_DIRECTORY_W
  135. #define FTPD_MAX_CONNECTIONS FTPD_MAX_CONNECTIONS_W
  136. #define FTPD_READ_ACCESS_MASK FTPD_READ_ACCESS_MASK_W
  137. #define FTPD_WRITE_ACCESS_MASK FTPD_WRITE_ACCESS_MASK_W
  138. #define FTPD_CONNECTION_TIMEOUT FTPD_CONNECTION_TIMEOUT_W
  139. #define FTPD_MSDOS_DIR_OUTPUT FTPD_MSDOS_DIR_OUTPUT_W
  140. #define FTPD_GREETING_MESSAGE FTPD_GREETING_MESSAGE_W
  141. #define FTPD_EXIT_MESSAGE FTPD_EXIT_MESSAGE_W
  142. #define FTPD_MAX_CLIENTS_MSG FTPD_MAX_CLIENTS_MSG_W
  143. #define FTPD_DEBUG_FLAGS FTPD_DEBUG_FLAGS_W
  144. #define FTPD_ANNOTATE_DIRS FTPD_ANNOTATE_DIRS_W
  145. #define FTPD_ANONYMOUS_SECRET FTPD_ANONYMOUS_SECRET_W
  146. #define FTPD_LOWERCASE_FILES FTPD_LOWERCASE_FILES_W
  147. #define FTPD_LOG_FILE_ACCESS FTPD_LOG_FILE_ACCESS_W
  148. #define FTPD_LOG_FILE FTPD_LOG_FILE_W
  149. #define FTPD_LOG_FILE_DIRECTORY FTPD_LOG_FILE_DIRECTORY_W
  150. #define FTPD_LISTEN_BACKLOG FTPD_LISTEN_BACKLOG_W
  151. #define FTPD_ENABLE_LICENSING FTPD_ENABLE_LICENSING_W
  152. #define FTPD_DEFAULT_LOGON_DOMAIN FTPD_DEFAULT_LOGON_DOMAIN_W
  153. #define FTPD_ENABLE_PORT_ATTACK FTPD_ENABLE_PORT_ATTACK_W
  154. #else // !UNICODE
  155. #define FTPD_SERVICE_NAME FTPD_SERVICE_NAME_A
  156. #define FTPD_ANNOTATION_FILE FTPD_ANNOTATION_FILE_A
  157. #define FTPD_PARAMETERS_KEY FTPD_PARAMETERS_KEY_A
  158. #define FTPD_PERFORMANCE_KEY FTPD_PERFORMANCE_KEY_A
  159. #define FTPD_ACCESS_KEY FTPD_ACCESS_KEY_A
  160. #define FTPD_ANONYMOUS_ONLY FTPD_ANONYMOUS_ONLY_A
  161. #define FTPD_LOG_ANONYMOUS FTPD_LOG_ANONYMOUS_A
  162. #define FTPD_LOG_NONANONYMOUS FTPD_LOG_NONANONYMOUS_A
  163. #define FTPD_ALLOW_ANONYMOUS FTPD_ALLOW_ANONYMOUS_A
  164. #define FTPD_ALLOW_GUEST_ACCESS FTPD_ALLOW_GUEST_ACCESS_A
  165. #define FTPD_ANONYMOUS_USERNAME FTPD_ANONYMOUS_USERNAME_A
  166. #define FTPD_HOME_DIRECTORY FTPD_HOME_DIRECTORY_A
  167. #define FTPD_MAX_CONNECTIONS FTPD_MAX_CONNECTIONS_A
  168. #define FTPD_READ_ACCESS_MASK FTPD_READ_ACCESS_MASK_A
  169. #define FTPD_WRITE_ACCESS_MASK FTPD_WRITE_ACCESS_MASK_A
  170. #define FTPD_CONNECTION_TIMEOUT FTPD_CONNECTION_TIMEOUT_A
  171. #define FTPD_MSDOS_DIR_OUTPUT FTPD_MSDOS_DIR_OUTPUT_A
  172. #define FTPD_GREETING_MESSAGE FTPD_GREETING_MESSAGE_A
  173. #define FTPD_EXIT_MESSAGE FTPD_EXIT_MESSAGE_A
  174. #define FTPD_MAX_CLIENTS_MSG FTPD_MAX_CLIENTS_MSG_A
  175. #define FTPD_DEBUG_FLAGS FTPD_DEBUG_FLAGS_A
  176. #define FTPD_ANNOTATE_DIRS FTPD_ANNOTATE_DIRS_A
  177. #define FTPD_ANONYMOUS_SECRET FTPD_ANONYMOUS_SECRET_A
  178. #define FTPD_LOWERCASE_FILES FTPD_LOWERCASE_FILES_A
  179. #define FTPD_LOG_FILE_ACCESS FTPD_LOG_FILE_ACCESS_A
  180. #define FTPD_LOG_FILE FTPD_LOG_FILE_A
  181. #define FTPD_LOG_FILE_DIRECTORY FTPD_LOG_FILE_DIRECTORY_A
  182. #define FTPD_LISTEN_BACKLOG FTPD_LISTEN_BACKLOG_A
  183. #define FTPD_ENABLE_LICENSING FTPD_ENABLE_LICENSING_A
  184. #define FTPD_DEFAULT_LOGON_DOMAIN FTPD_DEFAULT_LOGON_DOMAIN_A
  185. #define FTPD_ENABLE_PORT_ATTACK FTPD_ENABLE_PORT_ATTACK_A
  186. #endif // UNICODE
  187. //
  188. // Values for LogFileAccess
  189. //
  190. #define FTPD_LOG_DISABLED 0
  191. #define FTPD_LOG_SINGLE 1
  192. #define FTPD_LOG_DAILY 2
  193. //
  194. // Structures for APIs
  195. //
  196. typedef struct _FTP_USER_INFO
  197. {
  198. DWORD idUser; // User id
  199. LPWSTR pszUser; // User name
  200. BOOL fAnonymous; // TRUE if the user is logged on as
  201. // Anonymous, FALSE otherwise
  202. DWORD inetHost; // Host Address
  203. DWORD tConnect; // User Connection Time (elapsed seconds)
  204. } FTP_USER_INFO, * LPFTP_USER_INFO;
  205. typedef struct _FTP_STATISTICS_0
  206. {
  207. LARGE_INTEGER TotalBytesSent;
  208. LARGE_INTEGER TotalBytesReceived;
  209. DWORD TotalFilesSent;
  210. DWORD TotalFilesReceived;
  211. DWORD CurrentAnonymousUsers;
  212. DWORD CurrentNonAnonymousUsers;
  213. DWORD TotalAnonymousUsers;
  214. DWORD TotalNonAnonymousUsers;
  215. DWORD MaxAnonymousUsers;
  216. DWORD MaxNonAnonymousUsers;
  217. DWORD CurrentConnections;
  218. DWORD MaxConnections;
  219. DWORD ConnectionAttempts;
  220. DWORD LogonAttempts;
  221. DWORD TimeOfLastClear;
  222. } FTP_STATISTICS_0, * LPFTP_STATISTICS_0;
  223. //
  224. // API Prototypes
  225. //
  226. NET_API_STATUS
  227. I_FtpEnumerateUsers(
  228. IN LPWSTR pszServer OPTIONAL,
  229. OUT LPDWORD lpdwEntriesRead,
  230. OUT LPFTP_USER_INFO * Buffer
  231. );
  232. NET_API_STATUS
  233. I_FtpDisconnectUser(
  234. IN LPWSTR pszServer OPTIONAL,
  235. IN DWORD idUser
  236. );
  237. NET_API_STATUS
  238. I_FtpQueryVolumeSecurity(
  239. IN LPWSTR pszServer OPTIONAL,
  240. OUT LPDWORD lpdwReadAccess,
  241. OUT LPDWORD lpdwWriteAccess
  242. );
  243. NET_API_STATUS
  244. I_FtpSetVolumeSecurity(
  245. IN LPWSTR pszServer OPTIONAL,
  246. IN DWORD dwReadAccess,
  247. IN DWORD dwWriteAccess
  248. );
  249. NET_API_STATUS
  250. I_FtpQueryStatistics(
  251. IN LPWSTR pszServer OPTIONAL,
  252. IN DWORD Level,
  253. OUT LPBYTE * Buffer
  254. );
  255. NET_API_STATUS
  256. I_FtpClearStatistics(
  257. IN LPWSTR pszServer OPTIONAL
  258. );
  259. #ifdef __cplusplus
  260. }
  261. #endif // _cplusplus
  262. #endif // _FTPD_H_