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