[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 /* security.c */
304
305 NTSTATUS
306 SampCreateServerSD(OUT PSECURITY_DESCRIPTOR *ServerSd,
307 OUT PULONG Size);
308
309
310 /* setup.c */
311
312 BOOL
313 SampInitializeSAM(VOID);
314
315
316 /* user.c */
317
318 NTSTATUS
319 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject,
320 IN ULONG UserId,
321 IN ACCESS_MASK DesiredAccess,
322 OUT PSAM_DB_OBJECT *UserObject);
323
324 NTSTATUS
325 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject,
326 IN ULONG GroupId,
327 IN ULONG Attributes);
328
329 NTSTATUS
330 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject,
331 IN ULONG GroupId);
332
333 NTSTATUS
334 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject,
335 IN ULONG UserId,
336 IN ULONG GroupId,
337 OUT PULONG GroupAttributes);
338
339 NTSTATUS
340 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject,
341 IN ULONG UserId,
342 IN ULONG GroupId,
343 IN ULONG GroupAttributes);
344
345 NTSTATUS
346 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject);
347
348 NTSTATUS
349 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject,
350 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword,
351 IN BOOLEAN NtPasswordPresent,
352 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword,
353 IN BOOLEAN LmPasswordPresent);
354
355 NTSTATUS
356 SampGetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject,
357 IN OUT PSAMPR_LOGON_HOURS LogonHours);
358
359 NTSTATUS
360 SampSetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject,
361 IN PSAMPR_LOGON_HOURS LogonHours);
362
363
364 /* utils.c */
365
366 INT
367 SampLoadString(HINSTANCE hInstance,
368 UINT uId,
369 LPWSTR lpBuffer,
370 INT nBufferMax);
371
372 BOOL
373 SampIsSetupRunning(VOID);
374
375 PSID
376 AppendRidToSid(PSID SrcSid,
377 ULONG Rid);
378
379 NTSTATUS
380 SampGetRidFromSid(IN PSID Sid,
381 OUT PULONG Rid);
382
383
384 /* Undocumented advapi32 functions */
385
386 NTSTATUS
387 WINAPI
388 SystemFunction006(LPCSTR password,
389 LPSTR hash);
390
391 NTSTATUS
392 WINAPI
393 SystemFunction007(PUNICODE_STRING string,
394 LPBYTE hash);
395
396 /* EOF */