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