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