[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 #define NTOS_MODE_USER
19 #include <ndk/cmfuncs.h>
20 #include <ndk/kefuncs.h>
21 #include <ndk/obfuncs.h>
22 #include <ndk/rtlfuncs.h>
23 #include <ddk/ntsam.h>
24 #include <ntsecapi.h>
25 #include <sddl.h>
26
27 #include <samsrv/samsrv.h>
28
29 #include <sam_s.h>
30
31 #include <wine/debug.h>
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
119
120 /* alias.c */
121
122 NTSTATUS
123 SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject,
124 IN ULONG AliasId,
125 IN ACCESS_MASK DesiredAccess,
126 OUT PSAM_DB_OBJECT *AliasObject);
127
128
129 /* database.c */
130
131 NTSTATUS
132 SampInitDatabase(VOID);
133
134 NTSTATUS
135 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject,
136 IN LPWSTR ContainerName,
137 IN LPWSTR ObjectName,
138 IN ULONG RelativeId,
139 IN SAM_DB_OBJECT_TYPE ObjectType,
140 IN ACCESS_MASK DesiredAccess,
141 OUT PSAM_DB_OBJECT *DbObject);
142
143 NTSTATUS
144 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject,
145 IN LPWSTR ContainerName,
146 IN LPWSTR ObjectName,
147 IN ULONG RelativeId,
148 IN SAM_DB_OBJECT_TYPE ObjectType,
149 IN ACCESS_MASK DesiredAccess,
150 OUT PSAM_DB_OBJECT *DbObject);
151
152 NTSTATUS
153 SampValidateDbObject(SAMPR_HANDLE Handle,
154 SAM_DB_OBJECT_TYPE ObjectType,
155 ACCESS_MASK DesiredAccess,
156 PSAM_DB_OBJECT *DbObject);
157
158 NTSTATUS
159 SampCloseDbObject(PSAM_DB_OBJECT DbObject);
160
161 NTSTATUS
162 SampDeleteAccountDbObject(PSAM_DB_OBJECT DbObject);
163
164 NTSTATUS
165 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject,
166 LPWSTR AttributeName,
167 ULONG AttributeType,
168 LPVOID AttributeData,
169 ULONG AttributeSize);
170
171 NTSTATUS
172 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject,
173 LPWSTR AttributeName,
174 PULONG AttributeType,
175 LPVOID AttributeData,
176 PULONG AttributeSize);
177
178 NTSTATUS
179 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject,
180 LPWSTR AttributeName,
181 RPC_UNICODE_STRING *String);
182
183
184 /* domain.c */
185
186 NTSTATUS
187 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject,
188 IN LPCWSTR lpContainerName,
189 IN LPCWSTR lpAccountName,
190 IN ULONG ulRelativeId);
191
192 NTSTATUS
193 SampRemoveAccountNameFromDomain(IN PSAM_DB_OBJECT DomainObject,
194 IN LPCWSTR lpContainerName,
195 IN LPCWSTR lpAccountName);
196
197 NTSTATUS
198 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject,
199 IN LPCWSTR lpAccountName);
200
201
202 /* group.h */
203
204 NTSTATUS
205 SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject,
206 IN ULONG GroupId,
207 IN ACCESS_MASK DesiredAccess,
208 OUT PSAM_DB_OBJECT *GroupObject);
209
210 NTSTATUS
211 SampAddMemberToGroup(IN PSAM_DB_OBJECT GroupObject,
212 IN ULONG MemberId);
213
214 NTSTATUS
215 SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject,
216 IN ULONG MemberId);
217
218
219 /* registry.h */
220
221 NTSTATUS
222 SampRegCloseKey(IN HANDLE KeyHandle);
223
224 NTSTATUS
225 SampRegCreateKey(IN HANDLE ParentKeyHandle,
226 IN LPCWSTR KeyName,
227 IN ACCESS_MASK DesiredAccess,
228 OUT HANDLE KeyHandle);
229
230 NTSTATUS
231 SampRegDeleteKey(IN HANDLE ParentKeyHandle,
232 IN LPCWSTR KeyName);
233
234 NTSTATUS
235 SampRegEnumerateSubKey(IN HANDLE KeyHandle,
236 IN ULONG Index,
237 IN ULONG Length,
238 OUT LPWSTR Buffer);
239
240 NTSTATUS
241 SampRegOpenKey(IN HANDLE ParentKeyHandle,
242 IN LPCWSTR KeyName,
243 IN ACCESS_MASK DesiredAccess,
244 OUT HANDLE KeyHandle);
245
246 NTSTATUS
247 SampRegQueryKeyInfo(IN HANDLE KeyHandle,
248 OUT PULONG SubKeyCount,
249 OUT PULONG ValueCount);
250
251 NTSTATUS
252 SampRegDeleteValue(IN HANDLE KeyHandle,
253 IN LPCWSTR ValueName);
254
255 NTSTATUS
256 SampRegEnumerateValue(IN HANDLE KeyHandle,
257 IN ULONG Index,
258 OUT LPWSTR Name,
259 IN OUT PULONG NameLength,
260 OUT PULONG Type OPTIONAL,
261 OUT PVOID Data OPTIONAL,
262 IN OUT PULONG DataLength OPTIONAL);
263
264 NTSTATUS
265 SampRegQueryValue(IN HANDLE KeyHandle,
266 IN LPCWSTR ValueName,
267 OUT PULONG Type OPTIONAL,
268 OUT LPVOID Data OPTIONAL,
269 IN OUT PULONG DataLength OPTIONAL);
270
271 NTSTATUS
272 SampRegSetValue(IN HANDLE KeyHandle,
273 IN LPCWSTR ValueName,
274 IN ULONG Type,
275 IN LPVOID Data,
276 IN ULONG DataLength);
277
278
279 /* samspc.c */
280
281 VOID SampStartRpcServer(VOID);
282
283
284 /* setup.c */
285
286 BOOL SampIsSetupRunning(VOID);
287 BOOL SampInitializeSAM(VOID);
288
289
290 /* user.c */
291
292 NTSTATUS
293 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject,
294 IN ULONG UserId,
295 IN ACCESS_MASK DesiredAccess,
296 OUT PSAM_DB_OBJECT *UserObject);
297
298 NTSTATUS
299 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject,
300 IN ULONG GroupId,
301 IN ULONG Attributes);
302
303 NTSTATUS
304 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject,
305 IN ULONG GroupId);
306
307 NTSTATUS
308 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject,
309 IN ULONG UserId,
310 IN ULONG GroupId,
311 OUT PULONG GroupAttributes);
312
313 NTSTATUS
314 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject,
315 IN ULONG UserId,
316 IN ULONG GroupId,
317 IN ULONG GroupAttributes);
318
319 NTSTATUS
320 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject);
321
322 NTSTATUS
323 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject,
324 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword,
325 IN BOOLEAN NtPasswordPresent,
326 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword,
327 IN BOOLEAN LmPasswordPresent);
328
329 /* EOF */