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