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.

445 lines
13 KiB

  1. /*++
  2. Copyright (c) 1987-1991 Microsoft Corporation
  3. Module Name:
  4. ssi.h
  5. Abstract:
  6. Definition of Netlogon service APIs and structures used for SAM database
  7. replication.
  8. This file is shared by the Netlogon service and the XACT server.
  9. Author:
  10. Cliff Van Dyke (cliffv) 27-Jun-1991
  11. Environment:
  12. User mode only.
  13. Contains NT-specific code.
  14. Requires ANSI C extensions: slash-slash comments, long external names.
  15. Revision History:
  16. 27-Jun-1991 (cliffv)
  17. Ported from LanMan 2.1.
  18. 04-Apr-1992 (madana)
  19. Added support for LSA replication.
  20. --*/
  21. #ifndef _NET_SSI_H_
  22. #define _NET_SSI_H_
  23. //**************************************************************
  24. //
  25. // Data structure template - AUTHENTICATION
  26. //
  27. // ***************************************************************//
  28. typedef struct _NETLOGON_VALIDATION_UAS_INFO {
  29. #ifdef MIDL_PASS
  30. [string] wchar_t * usrlog1_eff_name;
  31. #else // MIDL_PASS
  32. LPWSTR usrlog1_eff_name;
  33. #endif // MIDL_PASS
  34. DWORD usrlog1_priv;
  35. DWORD usrlog1_auth_flags;
  36. DWORD usrlog1_num_logons;
  37. DWORD usrlog1_bad_pw_count;
  38. DWORD usrlog1_last_logon;
  39. DWORD usrlog1_last_logoff;
  40. DWORD usrlog1_logoff_time;
  41. DWORD usrlog1_kickoff_time;
  42. DWORD usrlog1_password_age;
  43. DWORD usrlog1_pw_can_change;
  44. DWORD usrlog1_pw_must_change;
  45. #ifdef MIDL_PASS
  46. [string] wchar_t * usrlog1_computer;
  47. [string] wchar_t * usrlog1_domain;
  48. [string] wchar_t * usrlog1_script_path;
  49. #else // MIDL_PASS
  50. LPWSTR usrlog1_computer;
  51. LPWSTR usrlog1_domain;
  52. LPWSTR usrlog1_script_path;
  53. #endif // MIDL_PASS
  54. DWORD usrlog1_reserved1;
  55. } NETLOGON_VALIDATION_UAS_INFO, *PNETLOGON_VALIDATION_UAS_INFO ;
  56. typedef struct _NETLOGON_LOGOFF_UAS_INFO {
  57. DWORD Duration;
  58. USHORT LogonCount;
  59. } NETLOGON_LOGOFF_UAS_INFORMATION, *PNETLOGON_LOGOFF_UAS_INFO;
  60. // ***************************************************************
  61. //
  62. // Function prototypes - AUTHENTICATION
  63. //
  64. // ***************************************************************
  65. NTSTATUS
  66. I_NetServerReqChallenge(
  67. IN LPWSTR PrimaryName OPTIONAL,
  68. IN LPWSTR ComputerName,
  69. IN PNETLOGON_CREDENTIAL ClientChallenge,
  70. OUT PNETLOGON_CREDENTIAL ServerChallenge
  71. );
  72. NTSTATUS
  73. I_NetServerAuthenticate(
  74. IN LPWSTR PrimaryName OPTIONAL,
  75. IN LPWSTR AccountName,
  76. IN NETLOGON_SECURE_CHANNEL_TYPE AccountType,
  77. IN LPWSTR ComputerName,
  78. IN PNETLOGON_CREDENTIAL ClientCredential,
  79. OUT PNETLOGON_CREDENTIAL ServerCredential
  80. );
  81. NTSTATUS
  82. I_NetServerAuthenticate2(
  83. IN LPWSTR PrimaryName OPTIONAL,
  84. IN LPWSTR AccountName,
  85. IN NETLOGON_SECURE_CHANNEL_TYPE AccountType,
  86. IN LPWSTR ComputerName,
  87. IN PNETLOGON_CREDENTIAL ClientCredential,
  88. OUT PNETLOGON_CREDENTIAL ServerCredential,
  89. IN OUT PULONG NegotiatedFlags
  90. );
  91. NTSTATUS
  92. I_NetServerAuthenticate3(
  93. IN LPWSTR PrimaryName OPTIONAL,
  94. IN LPWSTR AccountName,
  95. IN NETLOGON_SECURE_CHANNEL_TYPE AccountType,
  96. IN LPWSTR ComputerName,
  97. IN PNETLOGON_CREDENTIAL ClientCredential,
  98. OUT PNETLOGON_CREDENTIAL ServerCredential,
  99. IN OUT PULONG NegotiatedFlags,
  100. OUT PULONG AccountRid
  101. );
  102. //
  103. // Values of I_NetServerAuthenticate2 NegotiatedFlags
  104. //
  105. #define NETLOGON_SUPPORTS_ACCOUNT_LOCKOUT 0x00000001
  106. #define NETLOGON_SUPPORTS_PERSISTENT_BDC 0x00000002
  107. #define NETLOGON_SUPPORTS_RC4_ENCRYPTION 0x00000004
  108. #define NETLOGON_SUPPORTS_PROMOTION_COUNT 0x00000008
  109. #define NETLOGON_SUPPORTS_BDC_CHANGELOG 0x00000010
  110. #define NETLOGON_SUPPORTS_FULL_SYNC_RESTART 0x00000020
  111. #define NETLOGON_SUPPORTS_MULTIPLE_SIDS 0x00000040
  112. #define NETLOGON_SUPPORTS_REDO 0x00000080
  113. //
  114. // For NT 3.51, the mask was 0xFF.
  115. //
  116. #define NETLOGON_SUPPORTS_NT351_MASK 0x000000FF
  117. #define NETLOGON_SUPPORTS_REFUSE_CHANGE_PWD 0x00000100
  118. //
  119. // For NT 4.0, the mask was 0x1FF.
  120. // For NT 4 SP 4, the machine might have NETLOGON_SUPPORTS_AUTH_RPC or'd in
  121. //
  122. #define NETLOGON_SUPPORTS_NT4_MASK 0x400001FF
  123. #define NETLOGON_SUPPORTS_PDC_PASSWORD 0x00000200
  124. #define NETLOGON_SUPPORTS_GENERIC_PASSTHRU 0x00000400
  125. #define NETLOGON_SUPPORTS_CONCURRENT_RPC 0x00000800
  126. #define NETLOGON_SUPPORTS_AVOID_SAM_REPL 0x00001000
  127. #define NETLOGON_SUPPORTS_AVOID_LSA_REPL 0x00002000
  128. #define NETLOGON_SUPPORTS_STRONG_KEY 0x00004000 // Added after NT 5 Beta 2
  129. #define NETLOGON_SUPPORTS_TRANSITIVE 0x00008000 // Added after NT 5 Beta 2
  130. #define NETLOGON_SUPPORTS_DNS_DOMAIN_TRUST 0x00010000
  131. #define NETLOGON_SUPPORTS_PASSWORD_SET_2 0x00020000
  132. #define NETLOGON_SUPPORTS_GET_DOMAIN_INFO 0x00040000
  133. #define NETLOGON_SUPPORTS_LSA_AUTH_RPC 0x20000000 // Added after NT 5 Beta 2
  134. #define NETLOGON_SUPPORTS_AUTH_RPC 0x40000000
  135. //
  136. // Masks added after Windows 2000
  137. //
  138. #define NETLOGON_SUPPORTS_CROSS_FOREST 0x00080000 // Added for XP (Whistler client)
  139. #define NETLOGON_SUPPORTS_NT4EMULATOR_NEUTRALIZER 0x00100000 // Added for XP (Whistler client) and ported into win2k SP2
  140. //
  141. // For Windows 2000, the mask was 0x6007FFFF
  142. // NETLOGON_SUPPORTS_NT4EMULATOR_NEUTRALIZER was added in win2k SP2
  143. //
  144. #define NETLOGON_SUPPORTS_WIN2000_MASK (0x6007FFFF | NETLOGON_SUPPORTS_NT4EMULATOR_NEUTRALIZER)
  145. //
  146. // For Windows XP, NETLOGON_SUPPORTS_CROSS_FOREST was added
  147. //
  148. #define NETLOGON_SUPPORTS_XP_MASK (NETLOGON_SUPPORTS_WIN2000_MASK & NETLOGON_SUPPORTS_CROSS_FOREST)
  149. //
  150. // Mask of bits always supported by current build (regardless of options)
  151. //
  152. #define NETLOGON_SUPPORTS_MASK ( \
  153. NETLOGON_SUPPORTS_ACCOUNT_LOCKOUT | \
  154. NETLOGON_SUPPORTS_PERSISTENT_BDC | \
  155. NETLOGON_SUPPORTS_RC4_ENCRYPTION | \
  156. NETLOGON_SUPPORTS_PROMOTION_COUNT | \
  157. NETLOGON_SUPPORTS_BDC_CHANGELOG | \
  158. NETLOGON_SUPPORTS_FULL_SYNC_RESTART | \
  159. NETLOGON_SUPPORTS_MULTIPLE_SIDS | \
  160. NETLOGON_SUPPORTS_REDO | \
  161. NETLOGON_SUPPORTS_REFUSE_CHANGE_PWD | \
  162. NETLOGON_SUPPORTS_PDC_PASSWORD | \
  163. NETLOGON_SUPPORTS_GENERIC_PASSTHRU | \
  164. NETLOGON_SUPPORTS_CONCURRENT_RPC | \
  165. NETLOGON_SUPPORTS_TRANSITIVE | \
  166. NETLOGON_SUPPORTS_DNS_DOMAIN_TRUST | \
  167. NETLOGON_SUPPORTS_PASSWORD_SET_2 | \
  168. NETLOGON_SUPPORTS_GET_DOMAIN_INFO | \
  169. NETLOGON_SUPPORTS_CROSS_FOREST )
  170. NTSTATUS
  171. I_NetServerPasswordSet(
  172. IN LPWSTR PrimaryName OPTIONAL,
  173. IN LPWSTR AccountName,
  174. IN NETLOGON_SECURE_CHANNEL_TYPE AccountType,
  175. IN LPWSTR ComputerName,
  176. IN PNETLOGON_AUTHENTICATOR Authenticator,
  177. OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator,
  178. IN PENCRYPTED_LM_OWF_PASSWORD UasNewPassword
  179. );
  180. //
  181. // Values of QueryLevel
  182. #define NETLOGON_QUERY_DOMAIN_INFO 1
  183. #define NETLOGON_QUERY_LSA_POLICY_INFO 2
  184. NTSTATUS
  185. I_NetLogonGetDomainInfo(
  186. IN LPWSTR ServerName,
  187. IN LPWSTR ComputerName,
  188. IN PNETLOGON_AUTHENTICATOR Authenticator,
  189. OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator,
  190. IN DWORD QueryLevel,
  191. IN LPBYTE InBuffer,
  192. OUT LPBYTE *OutBuffer
  193. );
  194. NET_API_STATUS NET_API_FUNCTION
  195. I_NetLogonUasLogon (
  196. IN LPWSTR UserName,
  197. IN LPWSTR Workstation,
  198. OUT PNETLOGON_VALIDATION_UAS_INFO *ValidationInformation
  199. );
  200. NET_API_STATUS
  201. I_NetLogonUasLogoff (
  202. IN LPWSTR UserName,
  203. IN LPWSTR Workstation,
  204. OUT PNETLOGON_LOGOFF_UAS_INFO LogoffInformation
  205. );
  206. // **************************************************************
  207. //
  208. // Special values and constants - AUTHENTICATION
  209. //
  210. // **************************************************************
  211. // **************************************************************
  212. //
  213. // Data structure template - UAS/SAM REPLICATION
  214. //
  215. // **************************************************************
  216. typedef struct _UAS_INFO_0 {
  217. CHAR ComputerName[LM20_CNLEN+1];
  218. ULONG TimeCreated;
  219. ULONG SerialNumber;
  220. } UAS_INFO_0, *PUAS_INFO_0 ;
  221. // **************************************************************
  222. //
  223. // Function prototypes - UAS/SAM REPLICATION
  224. //
  225. // **************************************************************
  226. NET_API_STATUS NET_API_FUNCTION
  227. I_NetAccountDeltas (
  228. IN LPWSTR primaryname,
  229. IN LPWSTR computername,
  230. IN PNETLOGON_AUTHENTICATOR authenticator,
  231. OUT PNETLOGON_AUTHENTICATOR ret_auth,
  232. IN PUAS_INFO_0 record_id,
  233. IN DWORD count,
  234. IN DWORD level,
  235. OUT LPBYTE buffer,
  236. IN DWORD buffer_len,
  237. OUT PULONG entries_read,
  238. OUT PULONG total_entries,
  239. OUT PUAS_INFO_0 next_record_id
  240. );
  241. NET_API_STATUS NET_API_FUNCTION
  242. I_NetAccountSync (
  243. IN LPWSTR primaryname,
  244. IN LPWSTR computername,
  245. IN PNETLOGON_AUTHENTICATOR authenticator,
  246. OUT PNETLOGON_AUTHENTICATOR ret_auth,
  247. IN DWORD reference,
  248. IN DWORD level,
  249. OUT LPBYTE buffer,
  250. IN DWORD buffer_len,
  251. OUT PULONG entries_read,
  252. OUT PULONG total_entries,
  253. OUT PULONG next_reference,
  254. OUT PUAS_INFO_0 last_record_id
  255. );
  256. typedef enum _NETLOGON_DELTA_TYPE {
  257. AddOrChangeDomain = 1,
  258. AddOrChangeGroup,
  259. DeleteGroup,
  260. RenameGroup,
  261. AddOrChangeUser,
  262. DeleteUser,
  263. RenameUser,
  264. ChangeGroupMembership,
  265. AddOrChangeAlias,
  266. DeleteAlias,
  267. RenameAlias,
  268. ChangeAliasMembership,
  269. AddOrChangeLsaPolicy,
  270. AddOrChangeLsaTDomain,
  271. DeleteLsaTDomain,
  272. AddOrChangeLsaAccount,
  273. DeleteLsaAccount,
  274. AddOrChangeLsaSecret,
  275. DeleteLsaSecret,
  276. // The following deltas require NETLOGON_SUPPORTS_BDC_CHANGELOG to be
  277. // negotiated.
  278. DeleteGroupByName,
  279. DeleteUserByName,
  280. SerialNumberSkip,
  281. DummyChangeLogEntry
  282. } NETLOGON_DELTA_TYPE;
  283. //
  284. // Group and User account used for SSI.
  285. //
  286. #define SSI_ACCOUNT_NAME_POSTFIX L"$"
  287. #define SSI_ACCOUNT_NAME_POSTFIX_CHAR L'$'
  288. #define SSI_ACCOUNT_NAME_POSTFIX_LENGTH 1
  289. #define SSI_ACCOUNT_NAME_LENGTH (CNLEN + SSI_ACCOUNT_NAME_POSTFIX_LENGTH)
  290. #define SSI_SERVER_GROUP_W L"SERVERS"
  291. //
  292. // Structure to pass an encrypted password over the wire. The Length is the
  293. // length of the password, which should be placed at the end of the buffer.
  294. //
  295. #define NL_MAX_PASSWORD_LENGTH 256
  296. typedef struct _NL_TRUST_PASSWORD {
  297. WCHAR Buffer[NL_MAX_PASSWORD_LENGTH];
  298. ULONG Length;
  299. } NL_TRUST_PASSWORD, *PNL_TRUST_PASSWORD;
  300. //
  301. // Structure to be prefixed before the password in the Buffer of NL_TRUST_PASSWORD
  302. // structure passed over the wire. It will be used to distinguish between diferent
  303. // versions of information passed in the buffer. Begining with RC1 NT5, the presence
  304. // of the structure in the buffer and the equality of PasswordVersionPresent to
  305. // PASSWORD_VERSION_PRESENT indicates that the password version number is present
  306. // and is stored in PasswordVersionNumber; the value of ReservedField is set to 0.
  307. // RC0 NT5 clients will generate random numbers in place of NL_PASSWORD_VERSION; it
  308. // is highly unlikely that they will generate PASSWORD_VERSION_PRESENT sequence of
  309. // bits in place where the PasswordVersionPresent would be present. This (very week)
  310. // uncertainty will exist only between RC0 NT5 and RC1 NT5 machines. A server running
  311. // RC1 NT5 will check the PasswordVersionPresent field only for RC0 NT5 and higher
  312. // clients. The ReservedField will be used in future versions to indicate the version
  313. // of the information stored in the buffer.
  314. //
  315. #define PASSWORD_VERSION_NUMBER_PRESENT 0x02231968
  316. typedef struct _NL_PASSWORD_VERSION {
  317. DWORD ReservedField;
  318. DWORD PasswordVersionNumber;
  319. DWORD PasswordVersionPresent;
  320. } NL_PASSWORD_VERSION, *PNL_PASSWORD_VERSION;
  321. NTSTATUS
  322. I_NetServerPasswordSet2(
  323. IN LPWSTR PrimaryName OPTIONAL,
  324. IN LPWSTR AccountName,
  325. IN NETLOGON_SECURE_CHANNEL_TYPE AccountType,
  326. IN LPWSTR ComputerName,
  327. IN PNETLOGON_AUTHENTICATOR Authenticator,
  328. OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator,
  329. IN PNL_TRUST_PASSWORD NewPassword
  330. );
  331. NTSTATUS
  332. I_NetServerPasswordGet(
  333. IN LPWSTR PrimaryName,
  334. IN LPWSTR AccountName,
  335. IN NETLOGON_SECURE_CHANNEL_TYPE AccountType,
  336. IN LPWSTR ComputerName,
  337. IN PNETLOGON_AUTHENTICATOR Authenticator,
  338. OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator,
  339. OUT PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword
  340. );
  341. NTSTATUS
  342. I_NetServerTrustPasswordsGet(
  343. IN LPWSTR TrustedDcName,
  344. IN LPWSTR AccountName,
  345. IN NETLOGON_SECURE_CHANNEL_TYPE AccountType,
  346. IN LPWSTR ComputerName,
  347. IN PNETLOGON_AUTHENTICATOR Authenticator,
  348. OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator,
  349. OUT PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword,
  350. OUT PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword
  351. );
  352. NTSTATUS
  353. I_NetLogonSendToSam(
  354. IN LPWSTR PrimaryName,
  355. IN LPWSTR ComputerName,
  356. IN PNETLOGON_AUTHENTICATOR Authenticator,
  357. OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator,
  358. IN LPBYTE Buffer,
  359. IN ULONG BufferSize
  360. );
  361. //
  362. // Only define this API if the caller has #included the pre-requisite ntlsa.h
  363. #ifdef _NTLSA_
  364. NTSTATUS
  365. I_NetGetForestTrustInformation (
  366. IN LPWSTR ServerName OPTIONAL,
  367. IN LPWSTR ComputerName,
  368. IN PNETLOGON_AUTHENTICATOR Authenticator,
  369. OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator,
  370. IN DWORD Flags,
  371. OUT PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo
  372. );
  373. #endif // _NTLSA_
  374. #endif // _NET_SSI_H_