* Sync up to trunk head (r65426).
[reactos.git] / dll / win32 / samsrv / samsrv.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: Security Account Manager (LSA) Server
4 * FILE: reactos/dll/win32/samsrv/samsrv.h
5 * PURPOSE: Common header file
6 *
7 * PROGRAMMERS: Eric Kohl
8 */
9
10 #ifndef _SAMSRV_PCH_
11 #define _SAMSRV_PCH_
12
13 #include <stdio.h>
14 #include <stdlib.h>
15
16 #define WIN32_NO_STATUS
17 #define _INC_WINDOWS
18 #define COM_NO_WINDOWS_H
19
20 #include <windef.h>
21 #include <winbase.h>
22 #include <winreg.h>
23 #define NTOS_MODE_USER
24 #include <ndk/kefuncs.h>
25 #include <ndk/rtlfuncs.h>
26 #include <ddk/ntsam.h>
27 #include <sddl.h>
28 #include <sam_s.h>
29
30 #include <wine/debug.h>
31 WINE_DEFAULT_DEBUG_CHANNEL(samsrv);
32
33 typedef enum _SAM_DB_OBJECT_TYPE
34 {
35 SamDbIgnoreObject,
36 SamDbServerObject,
37 SamDbDomainObject,
38 SamDbAliasObject,
39 SamDbGroupObject,
40 SamDbUserObject
41 } SAM_DB_OBJECT_TYPE;
42
43 typedef struct _SAM_DB_OBJECT
44 {
45 ULONG Signature;
46 SAM_DB_OBJECT_TYPE ObjectType;
47 ULONG RefCount;
48 ACCESS_MASK Access;
49 LPWSTR Name;
50 HANDLE KeyHandle;
51 HANDLE MembersKeyHandle; // only used by Aliases
52 ULONG RelativeId;
53 BOOLEAN Trusted;
54 struct _SAM_DB_OBJECT *ParentObject;
55 } SAM_DB_OBJECT, *PSAM_DB_OBJECT;
56
57 #define SAMP_DB_SIGNATURE 0x87654321
58
59 typedef struct _SAM_ALIAS_FIXED_DATA
60 {
61 ULONG Version;
62 ULONG Reserved;
63 ULONG AliasId;
64 } SAM_ALIAS_FIXED_DATA, *PSAM_ALIAS_FIXED_DATA;
65
66 typedef struct _SAM_DOMAIN_FIXED_DATA
67 {
68 ULONG Version;
69 ULONG Reserved;
70 LARGE_INTEGER CreationTime;
71 LARGE_INTEGER DomainModifiedCount;
72 LARGE_INTEGER MaxPasswordAge; /* relative Time */
73 LARGE_INTEGER MinPasswordAge; /* relative Time */
74 LARGE_INTEGER ForceLogoff; /* relative Time */
75 LARGE_INTEGER LockoutDuration; /* relative Time */
76 LARGE_INTEGER LockoutObservationWindow; /* relative Time */
77 LARGE_INTEGER ModifiedCountAtLastPromotion;
78 ULONG NextRid;
79 ULONG PasswordProperties;
80 USHORT MinPasswordLength;
81 USHORT PasswordHistoryLength;
82 USHORT LockoutThreshold;
83 DOMAIN_SERVER_ENABLE_STATE DomainServerState;
84 DOMAIN_SERVER_ROLE DomainServerRole;
85 BOOLEAN UasCompatibilityRequired;
86 } SAM_DOMAIN_FIXED_DATA, *PSAM_DOMAIN_FIXED_DATA;
87
88 typedef struct _SAM_GROUP_FIXED_DATA
89 {
90 ULONG Version;
91 ULONG Reserved;
92 ULONG GroupId;
93 ULONG Attributes;
94 } SAM_GROUP_FIXED_DATA, *PSAM_GROUP_FIXED_DATA;
95
96 typedef struct _SAM_USER_FIXED_DATA
97 {
98 ULONG Version;
99 ULONG Reserved;
100 LARGE_INTEGER LastLogon;
101 LARGE_INTEGER LastLogoff;
102 LARGE_INTEGER PasswordLastSet;
103 LARGE_INTEGER AccountExpires;
104 LARGE_INTEGER LastBadPasswordTime;
105 ULONG UserId;
106 ULONG PrimaryGroupId;
107 ULONG UserAccountControl;
108 USHORT CountryCode;
109 USHORT CodePage;
110 USHORT BadPasswordCount;
111 USHORT LogonCount;
112 USHORT AdminCount;
113 USHORT OperatorCount;
114 } SAM_USER_FIXED_DATA, *PSAM_USER_FIXED_DATA;
115
116
117 extern PGENERIC_MAPPING pServerMapping;
118 extern ENCRYPTED_NT_OWF_PASSWORD EmptyNtHash;
119 extern ENCRYPTED_LM_OWF_PASSWORD EmptyLmHash;
120 extern RTL_RESOURCE SampResource;
121
122
123 /* alias.c */
124
125 NTSTATUS
126 SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject,
127 IN ULONG AliasId,
128 IN ACCESS_MASK DesiredAccess,
129 OUT PSAM_DB_OBJECT *AliasObject);
130
131 NTSTATUS
132 SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject,
133 IN PRPC_SID MemberId);
134
135 NTSTATUS
136 NTAPI
137 SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject,
138 IN PRPC_SID MemberId);
139
140 NTSTATUS
141 SampGetMembersInAlias(IN PSAM_DB_OBJECT AliasObject,
142 OUT PULONG MemberCount,
143 OUT PSAMPR_SID_INFORMATION *MemberArray);
144
145 NTSTATUS
146 SampRemoveAllMembersFromAlias(IN PSAM_DB_OBJECT AliasObject);
147
148
149 /* database.c */
150
151 NTSTATUS
152 SampInitDatabase(VOID);
153
154 NTSTATUS
155 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject,
156 IN LPWSTR ContainerName,
157 IN LPWSTR ObjectName,
158 IN ULONG RelativeId,
159 IN SAM_DB_OBJECT_TYPE ObjectType,
160 IN ACCESS_MASK DesiredAccess,
161 OUT PSAM_DB_OBJECT *DbObject);
162
163 NTSTATUS
164 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject,
165 IN LPWSTR ContainerName,
166 IN LPWSTR ObjectName,
167 IN ULONG RelativeId,
168 IN SAM_DB_OBJECT_TYPE ObjectType,
169 IN ACCESS_MASK DesiredAccess,
170 OUT PSAM_DB_OBJECT *DbObject);
171
172 NTSTATUS
173 SampValidateDbObject(SAMPR_HANDLE Handle,
174 SAM_DB_OBJECT_TYPE ObjectType,
175 ACCESS_MASK DesiredAccess,
176 PSAM_DB_OBJECT *DbObject);
177
178 NTSTATUS
179 SampCloseDbObject(PSAM_DB_OBJECT DbObject);
180
181 NTSTATUS
182 SampDeleteAccountDbObject(PSAM_DB_OBJECT DbObject);
183
184 NTSTATUS
185 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject,
186 LPWSTR AttributeName,
187 ULONG AttributeType,
188 LPVOID AttributeData,
189 ULONG AttributeSize);
190
191 NTSTATUS
192 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject,
193 LPWSTR AttributeName,
194 PULONG AttributeType,
195 LPVOID AttributeData,
196 PULONG AttributeSize);
197
198 NTSTATUS
199 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject,
200 LPWSTR AttributeName,
201 PRPC_UNICODE_STRING String);
202
203 NTSTATUS
204 SampSetObjectAttributeString(PSAM_DB_OBJECT DbObject,
205 LPWSTR AttributeName,
206 PRPC_UNICODE_STRING String);
207
208 /* domain.c */
209
210 NTSTATUS
211 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject,
212 IN LPCWSTR lpContainerName,
213 IN LPCWSTR lpAccountName,
214 IN ULONG ulRelativeId);
215
216 NTSTATUS
217 SampRemoveAccountNameFromDomain(IN PSAM_DB_OBJECT DomainObject,
218 IN LPCWSTR lpContainerName,
219 IN LPCWSTR lpAccountName);
220
221 NTSTATUS
222 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject,
223 IN LPCWSTR lpAccountName);
224
225 NTSTATUS
226 SampRemoveMemberFromAllAliases(IN PSAM_DB_OBJECT DomainObject,
227 IN PRPC_SID MemberSid);
228
229 NTSTATUS
230 SampCreateAccountSid(IN PSAM_DB_OBJECT DomainObject,
231 IN ULONG ulRelativeId,
232 IN OUT PSID *AccountSid);
233
234 /* group.h */
235
236 NTSTATUS
237 SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject,
238 IN ULONG GroupId,
239 IN ACCESS_MASK DesiredAccess,
240 OUT PSAM_DB_OBJECT *GroupObject);
241
242 NTSTATUS
243 SampAddMemberToGroup(IN PSAM_DB_OBJECT GroupObject,
244 IN ULONG MemberId);
245
246 NTSTATUS
247 SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject,
248 IN ULONG MemberId);
249
250
251 /* registry.h */
252
253 NTSTATUS
254 SampRegCloseKey(IN OUT PHANDLE KeyHandle);
255
256 NTSTATUS
257 SampRegCreateKey(IN HANDLE ParentKeyHandle,
258 IN LPCWSTR KeyName,
259 IN ACCESS_MASK DesiredAccess,
260 OUT PHANDLE KeyHandle);
261
262 NTSTATUS
263 SampRegDeleteKey(IN HANDLE ParentKeyHandle,
264 IN LPCWSTR KeyName);
265
266 NTSTATUS
267 SampRegEnumerateSubKey(IN HANDLE KeyHandle,
268 IN ULONG Index,
269 IN ULONG Length,
270 OUT LPWSTR Buffer);
271
272 NTSTATUS
273 SampRegOpenKey(IN HANDLE ParentKeyHandle,
274 IN LPCWSTR KeyName,
275 IN ACCESS_MASK DesiredAccess,
276 OUT PHANDLE KeyHandle);
277
278 NTSTATUS
279 SampRegQueryKeyInfo(IN HANDLE KeyHandle,
280 OUT PULONG SubKeyCount,
281 OUT PULONG ValueCount);
282
283 NTSTATUS
284 SampRegDeleteValue(IN HANDLE KeyHandle,
285 IN LPCWSTR ValueName);
286
287 NTSTATUS
288 SampRegEnumerateValue(IN HANDLE KeyHandle,
289 IN ULONG Index,
290 OUT LPWSTR Name,
291 IN OUT PULONG NameLength,
292 OUT PULONG Type OPTIONAL,
293 OUT PVOID Data OPTIONAL,
294 IN OUT PULONG DataLength OPTIONAL);
295
296 NTSTATUS
297 SampRegQueryValue(IN HANDLE KeyHandle,
298 IN LPCWSTR ValueName,
299 OUT PULONG Type OPTIONAL,
300 OUT LPVOID Data OPTIONAL,
301 IN OUT PULONG DataLength OPTIONAL);
302
303 NTSTATUS
304 SampRegSetValue(IN HANDLE KeyHandle,
305 IN LPCWSTR ValueName,
306 IN ULONG Type,
307 IN LPVOID Data,
308 IN ULONG DataLength);
309
310
311 /* samspc.c */
312
313 VOID
314 SampStartRpcServer(VOID);
315
316
317 /* security.c */
318
319 NTSTATUS
320 SampCreateServerSD(OUT PSECURITY_DESCRIPTOR *ServerSd,
321 OUT PULONG Size);
322
323 NTSTATUS
324 SampCreateBuiltinDomainSD(OUT PSECURITY_DESCRIPTOR *DomainSd,
325 OUT PULONG Size);
326
327 NTSTATUS
328 SampCreateAccountDomainSD(OUT PSECURITY_DESCRIPTOR *DomainSd,
329 OUT PULONG Size);
330
331 NTSTATUS
332 SampCreateAliasSD(OUT PSECURITY_DESCRIPTOR *AliasSd,
333 OUT PULONG Size);
334
335 NTSTATUS
336 SampCreateGroupSD(OUT PSECURITY_DESCRIPTOR *GroupSd,
337 OUT PULONG Size);
338
339 NTSTATUS
340 SampCreateUserSD(IN PSID UserSid,
341 OUT PSECURITY_DESCRIPTOR *UserSd,
342 OUT PULONG Size);
343
344 /* setup.c */
345
346 BOOL
347 SampInitializeSAM(VOID);
348
349
350 /* user.c */
351
352 NTSTATUS
353 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject,
354 IN ULONG UserId,
355 IN ACCESS_MASK DesiredAccess,
356 OUT PSAM_DB_OBJECT *UserObject);
357
358 NTSTATUS
359 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject,
360 IN ULONG GroupId,
361 IN ULONG Attributes);
362
363 NTSTATUS
364 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject,
365 IN ULONG GroupId);
366
367 NTSTATUS
368 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject,
369 IN ULONG UserId,
370 IN ULONG GroupId,
371 OUT PULONG GroupAttributes);
372
373 NTSTATUS
374 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject,
375 IN ULONG UserId,
376 IN ULONG GroupId,
377 IN ULONG GroupAttributes);
378
379 NTSTATUS
380 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject);
381
382 NTSTATUS
383 SampRemoveUserFromAllAliases(IN PSAM_DB_OBJECT UserObject);
384
385 NTSTATUS
386 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject,
387 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword,
388 IN BOOLEAN NtPasswordPresent,
389 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword,
390 IN BOOLEAN LmPasswordPresent);
391
392 NTSTATUS
393 SampGetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject,
394 IN OUT PSAMPR_LOGON_HOURS LogonHours);
395
396 NTSTATUS
397 SampSetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject,
398 IN PSAMPR_LOGON_HOURS LogonHours);
399
400
401 /* utils.c */
402
403 INT
404 SampLoadString(HINSTANCE hInstance,
405 UINT uId,
406 LPWSTR lpBuffer,
407 INT nBufferMax);
408
409 BOOL
410 SampIsSetupRunning(VOID);
411
412 PSID
413 AppendRidToSid(PSID SrcSid,
414 ULONG Rid);
415
416 NTSTATUS
417 SampGetRidFromSid(IN PSID Sid,
418 OUT PULONG Rid);
419
420 NTSTATUS
421 SampCheckAccountName(IN PRPC_UNICODE_STRING AccountName,
422 IN USHORT MaxLength);
423
424
425 /* Undocumented advapi32 functions */
426
427 NTSTATUS
428 WINAPI
429 SystemFunction006(LPCSTR password,
430 LPSTR hash);
431
432 NTSTATUS
433 WINAPI
434 SystemFunction007(PUNICODE_STRING string,
435 LPBYTE hash);
436
437 NTSTATUS
438 WINAPI
439 SystemFunction013(const BYTE *in,
440 const BYTE *key,
441 LPBYTE out);
442
443 #endif /* _SAMSRV_PCH_ */