[LSASRV] Implement and call the policy change notification routine
[reactos.git] / dll / win32 / lsasrv / lsasrv.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: Local Security Authority (LSA) Server
4 * FILE: reactos/dll/win32/lsasrv/lsasrv.h
5 * PURPOSE: Common header file
6 *
7 * PROGRAMMERS: Eric Kohl
8 */
9
10 #ifndef _LSASRV_H
11 #define _LSASRV_H
12
13 #include <stdarg.h>
14
15 #define WIN32_NO_STATUS
16 #define _INC_WINDOWS
17 #define COM_NO_WINDOWS_H
18
19 #include <windef.h>
20 #include <winbase.h>
21 #include <winreg.h>
22
23 #define NTOS_MODE_USER
24 #include <ndk/cmfuncs.h>
25 #include <ndk/exfuncs.h>
26 #include <ndk/kefuncs.h>
27 #include <ndk/mmfuncs.h>
28 #include <ndk/obfuncs.h>
29 #include <ndk/psfuncs.h>
30 #include <ndk/rtlfuncs.h>
31 #include <ndk/setypes.h>
32
33 #include <ntsam.h>
34 #include <ntlsa.h>
35 #include <sddl.h>
36
37 #include <srmp.h>
38
39 #include <lsass.h>
40 #include <lsa_s.h>
41
42 #include <wine/debug.h>
43 WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
44
45 typedef enum _LSA_DB_OBJECT_TYPE
46 {
47 LsaDbIgnoreObject,
48 LsaDbPolicyObject,
49 LsaDbAccountObject,
50 LsaDbDomainObject,
51 LsaDbSecretObject
52 } LSA_DB_OBJECT_TYPE, *PLSA_DB_OBJECT_TYPE;
53
54 typedef struct _LSA_DB_OBJECT
55 {
56 ULONG Signature;
57 LSA_DB_OBJECT_TYPE ObjectType;
58 ULONG RefCount;
59 ACCESS_MASK Access;
60 HANDLE KeyHandle;
61 BOOLEAN Trusted;
62 struct _LSA_DB_OBJECT *ParentObject;
63 } LSA_DB_OBJECT, *PLSA_DB_OBJECT;
64
65 #define LSAP_DB_SIGNATURE 0x12345678
66
67 #define POLICY_AUDIT_EVENT_TYPE_COUNT (AuditCategoryAccountLogon - AuditCategorySystem + 1)
68 typedef struct _LSAP_POLICY_AUDIT_EVENTS_DATA
69 {
70 BOOLEAN AuditingMode;
71 DWORD AuditEvents[POLICY_AUDIT_EVENT_TYPE_COUNT];
72 DWORD MaximumAuditEventCount;
73 } LSAP_POLICY_AUDIT_EVENTS_DATA, *PLSAP_POLICY_AUDIT_EVENTS_DATA;
74
75 typedef struct _LSAP_LOGON_CONTEXT
76 {
77 LIST_ENTRY Entry;
78 HANDLE ClientProcessHandle;
79 HANDLE ConnectionHandle;
80 } LSAP_LOGON_CONTEXT, *PLSAP_LOGON_CONTEXT;
81
82 typedef struct _SAMPR_ULONG_ARRAY
83 {
84 unsigned long Count;
85 unsigned long *Element;
86 } SAMPR_ULONG_ARRAY, *PSAMPR_ULONG_ARRAY;
87
88 extern SID_IDENTIFIER_AUTHORITY NullSidAuthority;
89 extern SID_IDENTIFIER_AUTHORITY WorldSidAuthority;
90 extern SID_IDENTIFIER_AUTHORITY LocalSidAuthority;
91 extern SID_IDENTIFIER_AUTHORITY CreatorSidAuthority;
92 extern SID_IDENTIFIER_AUTHORITY NtAuthority;
93
94 extern PSID BuiltinDomainSid;
95 extern UNICODE_STRING BuiltinDomainName;
96 extern PSID AccountDomainSid;
97 extern UNICODE_STRING AccountDomainName;
98
99 extern PSID LsapWorldSid;
100 extern PSID LsapNetworkSid;
101 extern PSID LsapBatchSid;
102 extern PSID LsapInteractiveSid;
103 extern PSID LsapServiceSid;
104 extern PSID LsapLocalSystemSid;
105 extern PSID LsapAdministratorsSid;
106
107
108 /* authpackage.c */
109 NTSTATUS
110 LsapInitAuthPackages(VOID);
111
112 NTSTATUS
113 LsapLookupAuthenticationPackage(PLSA_API_MSG RequestMsg,
114 PLSAP_LOGON_CONTEXT LogonContext);
115
116 NTSTATUS
117 LsapCallAuthenticationPackage(PLSA_API_MSG RequestMsg,
118 PLSAP_LOGON_CONTEXT LogonContext);
119
120 NTSTATUS
121 LsapLogonUser(PLSA_API_MSG RequestMsg,
122 PLSAP_LOGON_CONTEXT LogonContext);
123
124 /* authport.c */
125 NTSTATUS
126 StartAuthenticationPort(VOID);
127
128 /* database.c */
129 NTSTATUS
130 LsapInitDatabase(VOID);
131
132 NTSTATUS
133 LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
134 IN LPWSTR ContainerName,
135 IN LPWSTR ObjectName,
136 IN LSA_DB_OBJECT_TYPE HandleType,
137 IN ACCESS_MASK DesiredAccess,
138 IN BOOLEAN Trusted,
139 OUT PLSA_DB_OBJECT *DbObject);
140
141 NTSTATUS
142 LsapOpenDbObject(IN PLSA_DB_OBJECT ParentObject,
143 IN LPWSTR ContainerName,
144 IN LPWSTR ObjectName,
145 IN LSA_DB_OBJECT_TYPE ObjectType,
146 IN ACCESS_MASK DesiredAccess,
147 IN BOOLEAN Trusted,
148 OUT PLSA_DB_OBJECT *DbObject);
149
150 NTSTATUS
151 LsapValidateDbObject(IN LSAPR_HANDLE Handle,
152 IN LSA_DB_OBJECT_TYPE HandleType,
153 IN ACCESS_MASK GrantedAccess,
154 OUT PLSA_DB_OBJECT *DbObject);
155
156 NTSTATUS
157 LsapCloseDbObject(IN PLSA_DB_OBJECT DbObject);
158
159 NTSTATUS
160 LsapDeleteDbObject(IN PLSA_DB_OBJECT DbObject);
161
162 NTSTATUS
163 LsapGetObjectAttribute(PLSA_DB_OBJECT DbObject,
164 LPWSTR AttributeName,
165 LPVOID AttributeData,
166 PULONG AttributeSize);
167
168 NTSTATUS
169 LsapSetObjectAttribute(PLSA_DB_OBJECT DbObject,
170 LPWSTR AttributeName,
171 LPVOID AttributeData,
172 ULONG AttributeSize);
173
174 NTSTATUS
175 LsapDeleteObjectAttribute(PLSA_DB_OBJECT DbObject,
176 LPWSTR AttributeName);
177
178 /* dssetup.c */
179 VOID
180 DsSetupInit(VOID);
181
182 /* lookup.c */
183 NTSTATUS
184 LsapInitSids(VOID);
185
186 ULONG
187 LsapGetRelativeIdFromSid(PSID Sid);
188
189 NTSTATUS
190 LsapLookupNames(DWORD Count,
191 PRPC_UNICODE_STRING Names,
192 PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
193 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids,
194 LSAP_LOOKUP_LEVEL LookupLevel,
195 DWORD *MappedCount,
196 DWORD LookupOptions,
197 DWORD ClientRevision);
198
199 NTSTATUS
200 LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
201 PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
202 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
203 LSAP_LOOKUP_LEVEL LookupLevel,
204 DWORD *MappedCount,
205 DWORD LookupOptions,
206 DWORD ClientRevision);
207
208 /* lsarpc.c */
209 NTSTATUS
210 LsarStartRpcServer(VOID);
211
212 /* notify.c */
213 VOID
214 LsapInitNotificationList(VOID);
215
216 NTSTATUS
217 LsapRegisterNotification(
218 PLSA_API_MSG RequestMsg);
219
220 VOID
221 LsapNotifyPolicyChange(
222 POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass);
223
224 /* policy.c */
225 NTSTATUS
226 LsarQueryAuditLog(PLSA_DB_OBJECT PolicyObject,
227 PLSAPR_POLICY_INFORMATION *PolicyInformation);
228
229 NTSTATUS
230 LsarQueryAuditEvents(PLSA_DB_OBJECT PolicyObject,
231 PLSAPR_POLICY_INFORMATION *PolicyInformation);
232
233 NTSTATUS
234 LsarQueryPrimaryDomain(PLSA_DB_OBJECT PolicyObject,
235 PLSAPR_POLICY_INFORMATION *PolicyInformation);
236
237 NTSTATUS
238 LsarQueryPdAccount(PLSA_DB_OBJECT PolicyObject,
239 PLSAPR_POLICY_INFORMATION *PolicyInformation);
240
241 NTSTATUS
242 LsarQueryAccountDomain(PLSA_DB_OBJECT PolicyObject,
243 PLSAPR_POLICY_INFORMATION *PolicyInformation);
244
245 NTSTATUS
246 LsarQueryServerRole(PLSA_DB_OBJECT PolicyObject,
247 PLSAPR_POLICY_INFORMATION *PolicyInformation);
248
249 NTSTATUS
250 LsarQueryReplicaSource(PLSA_DB_OBJECT PolicyObject,
251 PLSAPR_POLICY_INFORMATION *PolicyInformation);
252
253 NTSTATUS
254 LsarQueryDefaultQuota(PLSA_DB_OBJECT PolicyObject,
255 PLSAPR_POLICY_INFORMATION *PolicyInformation);
256
257 NTSTATUS
258 LsarQueryModification(PLSA_DB_OBJECT PolicyObject,
259 PLSAPR_POLICY_INFORMATION *PolicyInformation);
260
261 NTSTATUS
262 LsarQueryAuditFull(PLSA_DB_OBJECT PolicyObject,
263 PLSAPR_POLICY_INFORMATION *PolicyInformation);
264
265 NTSTATUS
266 LsarQueryDnsDomain(PLSA_DB_OBJECT PolicyObject,
267 PLSAPR_POLICY_INFORMATION *PolicyInformation);
268
269 NTSTATUS
270 LsarQueryDnsDomainInt(PLSA_DB_OBJECT PolicyObject,
271 PLSAPR_POLICY_INFORMATION *PolicyInformation);
272
273 NTSTATUS
274 LsarQueryLocalAccountDomain(PLSA_DB_OBJECT PolicyObject,
275 PLSAPR_POLICY_INFORMATION *PolicyInformation);
276
277 NTSTATUS
278 LsarSetAuditLog(PLSA_DB_OBJECT PolicyObject,
279 PPOLICY_AUDIT_LOG_INFO Info);
280
281 NTSTATUS
282 LsarSetAuditEvents(PLSA_DB_OBJECT PolicyObject,
283 PLSAPR_POLICY_AUDIT_EVENTS_INFO Info);
284
285 NTSTATUS
286 LsarSetPrimaryDomain(PLSA_DB_OBJECT PolicyObject,
287 PLSAPR_POLICY_PRIMARY_DOM_INFO Info);
288
289 NTSTATUS
290 LsarSetAccountDomain(PLSA_DB_OBJECT PolicyObject,
291 PLSAPR_POLICY_ACCOUNT_DOM_INFO Info);
292
293 NTSTATUS
294 LsarSetServerRole(PLSA_DB_OBJECT PolicyObject,
295 PPOLICY_LSA_SERVER_ROLE_INFO Info);
296
297 NTSTATUS
298 LsarSetReplicaSource(PLSA_DB_OBJECT PolicyObject,
299 PPOLICY_LSA_REPLICA_SRCE_INFO Info);
300
301 NTSTATUS
302 LsarSetDefaultQuota(PLSA_DB_OBJECT PolicyObject,
303 PPOLICY_DEFAULT_QUOTA_INFO Info);
304
305 NTSTATUS
306 LsarSetModification(PLSA_DB_OBJECT PolicyObject,
307 PPOLICY_MODIFICATION_INFO Info);
308
309 NTSTATUS
310 LsarSetAuditFull(PLSA_DB_OBJECT PolicyObject,
311 PPOLICY_AUDIT_FULL_QUERY_INFO Info);
312
313 NTSTATUS
314 LsarSetDnsDomain(PLSA_DB_OBJECT PolicyObject,
315 PLSAPR_POLICY_DNS_DOMAIN_INFO Info);
316
317 NTSTATUS
318 LsarSetDnsDomainInt(PLSA_DB_OBJECT PolicyObject,
319 PLSAPR_POLICY_DNS_DOMAIN_INFO Info);
320
321 NTSTATUS
322 LsarSetLocalAccountDomain(PLSA_DB_OBJECT PolicyObject,
323 PLSAPR_POLICY_ACCOUNT_DOM_INFO Info);
324
325 /* privileges.c */
326 NTSTATUS
327 LsarpLookupPrivilegeName(PLUID Value,
328 PRPC_UNICODE_STRING *Name);
329
330 NTSTATUS
331 LsarpLookupPrivilegeDisplayName(PRPC_UNICODE_STRING Name,
332 USHORT ClientLanguage,
333 USHORT ClientSystemDefaultLanguage,
334 PRPC_UNICODE_STRING *DisplayName,
335 USHORT *LanguageReturned);
336
337 PLUID
338 LsarpLookupPrivilegeValue(
339 IN PRPC_UNICODE_STRING Name);
340
341 NTSTATUS
342 LsarpEnumeratePrivileges(DWORD *EnumerationContext,
343 PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer,
344 DWORD PreferedMaximumLength);
345
346 NTSTATUS
347 LsapLookupAccountRightName(ULONG RightValue,
348 PRPC_UNICODE_STRING *Name);
349
350 ACCESS_MASK
351 LsapLookupAccountRightValue(
352 IN PRPC_UNICODE_STRING Name);
353
354 /* registry.h */
355 NTSTATUS
356 LsapRegCloseKey(IN HANDLE KeyHandle);
357
358 NTSTATUS
359 LsapRegCreateKey(IN HANDLE ParentKeyHandle,
360 IN LPCWSTR KeyName,
361 IN ACCESS_MASK DesiredAccess,
362 OUT HANDLE KeyHandle);
363
364 NTSTATUS
365 LsapRegDeleteSubKey(IN HANDLE ParentKeyHandle,
366 IN LPCWSTR KeyName);
367
368 NTSTATUS
369 LsapRegDeleteKey(IN HANDLE KeyHandle);
370
371 NTSTATUS
372 LsapRegEnumerateSubKey(IN HANDLE KeyHandle,
373 IN ULONG Index,
374 IN ULONG Length,
375 OUT LPWSTR Buffer);
376
377 NTSTATUS
378 LsapRegOpenKey(IN HANDLE ParentKeyHandle,
379 IN LPCWSTR KeyName,
380 IN ACCESS_MASK DesiredAccess,
381 OUT HANDLE KeyHandle);
382
383 NTSTATUS
384 LsapRegQueryKeyInfo(IN HANDLE KeyHandle,
385 OUT PULONG SubKeyCount,
386 OUT PULONG MaxSubKeyNameLength,
387 OUT PULONG ValueCount);
388
389 NTSTATUS
390 LsapRegDeleteValue(IN HANDLE KeyHandle,
391 IN LPWSTR ValueName);
392
393 NTSTATUS
394 LsapRegEnumerateValue(IN HANDLE KeyHandle,
395 IN ULONG Index,
396 OUT LPWSTR Name,
397 IN OUT PULONG NameLength,
398 OUT PULONG Type OPTIONAL,
399 OUT PVOID Data OPTIONAL,
400 IN OUT PULONG DataLength OPTIONAL);
401
402 NTSTATUS
403 LsapRegQueryValue(IN HANDLE KeyHandle,
404 IN LPWSTR ValueName,
405 OUT PULONG Type OPTIONAL,
406 OUT LPVOID Data OPTIONAL,
407 IN OUT PULONG DataLength OPTIONAL);
408
409 NTSTATUS
410 LsapRegSetValue(IN HANDLE KeyHandle,
411 IN LPWSTR ValueName,
412 IN ULONG Type,
413 IN LPVOID Data,
414 IN ULONG DataLength);
415
416 /* security.c */
417 NTSTATUS
418 LsapCreatePolicySd(PSECURITY_DESCRIPTOR *PolicySd,
419 PULONG PolicySdSize);
420
421 NTSTATUS
422 LsapCreateAccountSd(PSECURITY_DESCRIPTOR *AccountSd,
423 PULONG AccountSdSize);
424
425 NTSTATUS
426 LsapCreateSecretSd(PSECURITY_DESCRIPTOR *SecretSd,
427 PULONG SecretSdSize);
428
429 /* session.c */
430 VOID
431 LsapInitLogonSessions(VOID);
432
433 NTSTATUS
434 NTAPI
435 LsapCreateLogonSession(IN PLUID LogonId);
436
437 NTSTATUS
438 NTAPI
439 LsapDeleteLogonSession(IN PLUID LogonId);
440
441 NTSTATUS
442 NTAPI
443 LsapAddCredential(
444 _In_ PLUID LogonId,
445 _In_ ULONG AuthenticationPackage,
446 _In_ PLSA_STRING PrimaryKeyValue,
447 _In_ PLSA_STRING Credential);
448
449 NTSTATUS
450 NTAPI
451 LsapGetCredentials(
452 _In_ PLUID LogonId,
453 _In_ ULONG AuthenticationPackage,
454 _Inout_ PULONG QueryContext,
455 _In_ BOOLEAN RetrieveAllCredentials,
456 _Inout_ PLSA_STRING PrimaryKeyValue,
457 _Out_ PULONG PrimaryKeyLength,
458 _Out_ PLSA_STRING Credentials);
459
460 NTSTATUS
461 NTAPI
462 LsapDeleteCredential(
463 _In_ PLUID LogonId,
464 _In_ ULONG AuthenticationPackage,
465 _In_ PLSA_STRING PrimaryKeyValue);
466
467 NTSTATUS
468 LsapSetLogonSessionData(
469 _In_ PLUID LogonId,
470 _In_ ULONG LogonType,
471 _In_ PUNICODE_STRING UserName,
472 _In_ PUNICODE_STRING LogonDomain,
473 _In_ PSID Sid);
474
475 NTSTATUS
476 LsapEnumLogonSessions(IN OUT PLSA_API_MSG RequestMsg);
477
478 NTSTATUS
479 LsapGetLogonSessionData(IN OUT PLSA_API_MSG RequestMsg);
480
481 /* srm.c */
482 NTSTATUS
483 LsapRmInitializeServer(VOID);
484
485 NTSTATUS
486 LsapRmCreateLogonSession(
487 PLUID LogonId);
488
489 NTSTATUS
490 LsapRmDeleteLogonSession(
491 PLUID LogonId);
492
493 /* utils.c */
494 INT
495 LsapLoadString(HINSTANCE hInstance,
496 UINT uId,
497 LPWSTR lpBuffer,
498 INT nBufferMax);
499
500 INT
501 LsapGetResourceStringLengthEx(
502 _In_ HINSTANCE hInstance,
503 _In_ UINT uId,
504 _In_ USHORT usLanguage);
505
506 INT
507 LsapLoadStringEx(
508 _In_ HINSTANCE hInstance,
509 _In_ UINT uId,
510 _In_ USHORT usLanguage,
511 _Out_ LPWSTR lpBuffer,
512 _Out_ INT nBufferMax);
513
514 PSID
515 LsapAppendRidToSid(
516 PSID SrcSid,
517 ULONG Rid);
518
519 #endif /* _LSASRV_H */