[LSASRV][MSV1_0]
[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 #include <stdarg.h>
11
12 #define WIN32_NO_STATUS
13 #define _INC_WINDOWS
14 #define COM_NO_WINDOWS_H
15
16 #include <windef.h>
17 #include <winbase.h>
18 #include <winreg.h>
19 #include <winuser.h>
20
21 #define NTOS_MODE_USER
22 #include <ndk/cmfuncs.h>
23 #include <ndk/kefuncs.h>
24 #include <ndk/lpctypes.h>
25 #include <ndk/lpcfuncs.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 #include <ndk/sefuncs.h>
32 #include <ndk/umfuncs.h>
33
34 #include <ntsam.h>
35 #include <ntlsa.h>
36 #include <sddl.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 #include "resources.h"
45
46 typedef enum _LSA_DB_OBJECT_TYPE
47 {
48 LsaDbIgnoreObject,
49 LsaDbPolicyObject,
50 LsaDbAccountObject,
51 LsaDbDomainObject,
52 LsaDbSecretObject
53 } LSA_DB_OBJECT_TYPE, *PLSA_DB_OBJECT_TYPE;
54
55 typedef struct _LSA_DB_OBJECT
56 {
57 ULONG Signature;
58 LSA_DB_OBJECT_TYPE ObjectType;
59 ULONG RefCount;
60 ACCESS_MASK Access;
61 HANDLE KeyHandle;
62 BOOLEAN Trusted;
63 struct _LSA_DB_OBJECT *ParentObject;
64 } LSA_DB_OBJECT, *PLSA_DB_OBJECT;
65
66 #define LSAP_DB_SIGNATURE 0x12345678
67
68
69 typedef struct _LSAP_POLICY_AUDIT_EVENTS_DATA
70 {
71 BOOLEAN AuditingMode;
72 DWORD MaximumAuditEventCount;
73 DWORD AuditEvents[0];
74 } LSAP_POLICY_AUDIT_EVENTS_DATA, *PLSAP_POLICY_AUDIT_EVENTS_DATA;
75
76 typedef struct _LSAP_LOGON_CONTEXT
77 {
78 LIST_ENTRY Entry;
79 HANDLE ClientProcessHandle;
80 HANDLE ConnectionHandle;
81 } LSAP_LOGON_CONTEXT, *PLSAP_LOGON_CONTEXT;
82
83 extern SID_IDENTIFIER_AUTHORITY NullSidAuthority;
84 extern SID_IDENTIFIER_AUTHORITY WorldSidAuthority;
85 extern SID_IDENTIFIER_AUTHORITY LocalSidAuthority;
86 extern SID_IDENTIFIER_AUTHORITY CreatorSidAuthority;
87 extern SID_IDENTIFIER_AUTHORITY NtAuthority;
88
89 extern PSID BuiltinDomainSid;
90 extern UNICODE_STRING BuiltinDomainName;
91 extern PSID AccountDomainSid;
92 extern UNICODE_STRING AccountDomainName;
93
94 extern PSID LsapWorldSid;
95 extern PSID LsapNetworkSid;
96 extern PSID LsapBatchSid;
97 extern PSID LsapInteractiveSid;
98 extern PSID LsapServiceSid;
99 extern PSID LsapLocalSystemSid;
100 extern PSID LsapAdministratorsSid;
101
102
103 /* authpackage.c */
104 NTSTATUS
105 LsapInitAuthPackages(VOID);
106
107 NTSTATUS
108 LsapLookupAuthenticationPackage(PLSA_API_MSG RequestMsg,
109 PLSAP_LOGON_CONTEXT LogonContext);
110
111 NTSTATUS
112 LsapCallAuthenticationPackage(PLSA_API_MSG RequestMsg,
113 PLSAP_LOGON_CONTEXT LogonContext);
114
115 NTSTATUS
116 LsapLogonUser(PLSA_API_MSG RequestMsg,
117 PLSAP_LOGON_CONTEXT LogonContext);
118
119 /* authport.c */
120 NTSTATUS
121 StartAuthenticationPort(VOID);
122
123 /* database.c */
124 NTSTATUS
125 LsapInitDatabase(VOID);
126
127 NTSTATUS
128 LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
129 IN LPWSTR ContainerName,
130 IN LPWSTR ObjectName,
131 IN LSA_DB_OBJECT_TYPE HandleType,
132 IN ACCESS_MASK DesiredAccess,
133 IN BOOLEAN Trusted,
134 OUT PLSA_DB_OBJECT *DbObject);
135
136 NTSTATUS
137 LsapOpenDbObject(IN PLSA_DB_OBJECT ParentObject,
138 IN LPWSTR ContainerName,
139 IN LPWSTR ObjectName,
140 IN LSA_DB_OBJECT_TYPE ObjectType,
141 IN ACCESS_MASK DesiredAccess,
142 IN BOOLEAN Trusted,
143 OUT PLSA_DB_OBJECT *DbObject);
144
145 NTSTATUS
146 LsapValidateDbObject(IN LSAPR_HANDLE Handle,
147 IN LSA_DB_OBJECT_TYPE HandleType,
148 IN ACCESS_MASK GrantedAccess,
149 OUT PLSA_DB_OBJECT *DbObject);
150
151 NTSTATUS
152 LsapCloseDbObject(IN PLSA_DB_OBJECT DbObject);
153
154 NTSTATUS
155 LsapDeleteDbObject(IN PLSA_DB_OBJECT DbObject);
156
157 NTSTATUS
158 LsapGetObjectAttribute(PLSA_DB_OBJECT DbObject,
159 LPWSTR AttributeName,
160 LPVOID AttributeData,
161 PULONG AttributeSize);
162
163 NTSTATUS
164 LsapSetObjectAttribute(PLSA_DB_OBJECT DbObject,
165 LPWSTR AttributeName,
166 LPVOID AttributeData,
167 ULONG AttributeSize);
168
169 NTSTATUS
170 LsapDeleteObjectAttribute(PLSA_DB_OBJECT DbObject,
171 LPWSTR AttributeName);
172
173 /* lookup.c */
174 NTSTATUS
175 LsapInitSids(VOID);
176
177 ULONG
178 LsapGetRelativeIdFromSid(PSID Sid);
179
180 NTSTATUS
181 LsapLookupNames(DWORD Count,
182 PRPC_UNICODE_STRING Names,
183 PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
184 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids,
185 LSAP_LOOKUP_LEVEL LookupLevel,
186 DWORD *MappedCount,
187 DWORD LookupOptions,
188 DWORD ClientRevision);
189
190 NTSTATUS
191 LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
192 PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
193 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
194 LSAP_LOOKUP_LEVEL LookupLevel,
195 DWORD *MappedCount,
196 DWORD LookupOptions,
197 DWORD ClientRevision);
198
199 /* lsarpc.c */
200 VOID
201 LsarStartRpcServer(VOID);
202
203 /* policy.c */
204 NTSTATUS
205 LsarQueryAuditLog(PLSA_DB_OBJECT PolicyObject,
206 PLSAPR_POLICY_INFORMATION *PolicyInformation);
207
208 NTSTATUS
209 LsarQueryAuditEvents(PLSA_DB_OBJECT PolicyObject,
210 PLSAPR_POLICY_INFORMATION *PolicyInformation);
211
212 NTSTATUS
213 LsarQueryPrimaryDomain(PLSA_DB_OBJECT PolicyObject,
214 PLSAPR_POLICY_INFORMATION *PolicyInformation);
215
216 NTSTATUS
217 LsarQueryPdAccount(PLSA_DB_OBJECT PolicyObject,
218 PLSAPR_POLICY_INFORMATION *PolicyInformation);
219
220 NTSTATUS
221 LsarQueryAccountDomain(PLSA_DB_OBJECT PolicyObject,
222 PLSAPR_POLICY_INFORMATION *PolicyInformation);
223
224 NTSTATUS
225 LsarQueryServerRole(PLSA_DB_OBJECT PolicyObject,
226 PLSAPR_POLICY_INFORMATION *PolicyInformation);
227
228 NTSTATUS
229 LsarQueryReplicaSource(PLSA_DB_OBJECT PolicyObject,
230 PLSAPR_POLICY_INFORMATION *PolicyInformation);
231
232 NTSTATUS
233 LsarQueryDefaultQuota(PLSA_DB_OBJECT PolicyObject,
234 PLSAPR_POLICY_INFORMATION *PolicyInformation);
235
236 NTSTATUS
237 LsarQueryModification(PLSA_DB_OBJECT PolicyObject,
238 PLSAPR_POLICY_INFORMATION *PolicyInformation);
239
240 NTSTATUS
241 LsarQueryAuditFull(PLSA_DB_OBJECT PolicyObject,
242 PLSAPR_POLICY_INFORMATION *PolicyInformation);
243
244 NTSTATUS
245 LsarQueryDnsDomain(PLSA_DB_OBJECT PolicyObject,
246 PLSAPR_POLICY_INFORMATION *PolicyInformation);
247
248 NTSTATUS
249 LsarQueryDnsDomainInt(PLSA_DB_OBJECT PolicyObject,
250 PLSAPR_POLICY_INFORMATION *PolicyInformation);
251
252 NTSTATUS
253 LsarQueryLocalAccountDomain(PLSA_DB_OBJECT PolicyObject,
254 PLSAPR_POLICY_INFORMATION *PolicyInformation);
255
256 NTSTATUS
257 LsarSetAuditLog(PLSA_DB_OBJECT PolicyObject,
258 PPOLICY_AUDIT_LOG_INFO Info);
259
260 NTSTATUS
261 LsarSetAuditEvents(PLSA_DB_OBJECT PolicyObject,
262 PLSAPR_POLICY_AUDIT_EVENTS_INFO Info);
263
264 NTSTATUS
265 LsarSetPrimaryDomain(PLSA_DB_OBJECT PolicyObject,
266 PLSAPR_POLICY_PRIMARY_DOM_INFO Info);
267
268 NTSTATUS
269 LsarSetAccountDomain(PLSA_DB_OBJECT PolicyObject,
270 PLSAPR_POLICY_ACCOUNT_DOM_INFO Info);
271
272 NTSTATUS
273 LsarSetServerRole(PLSA_DB_OBJECT PolicyObject,
274 PPOLICY_LSA_SERVER_ROLE_INFO Info);
275
276 NTSTATUS
277 LsarSetReplicaSource(PLSA_DB_OBJECT PolicyObject,
278 PPOLICY_LSA_REPLICA_SRCE_INFO Info);
279
280 NTSTATUS
281 LsarSetDefaultQuota(PLSA_DB_OBJECT PolicyObject,
282 PPOLICY_DEFAULT_QUOTA_INFO Info);
283
284 NTSTATUS
285 LsarSetModification(PLSA_DB_OBJECT PolicyObject,
286 PPOLICY_MODIFICATION_INFO Info);
287
288 NTSTATUS
289 LsarSetAuditFull(PLSA_DB_OBJECT PolicyObject,
290 PPOLICY_AUDIT_FULL_QUERY_INFO Info);
291
292 NTSTATUS
293 LsarSetDnsDomain(PLSA_DB_OBJECT PolicyObject,
294 PLSAPR_POLICY_DNS_DOMAIN_INFO Info);
295
296 NTSTATUS
297 LsarSetDnsDomainInt(PLSA_DB_OBJECT PolicyObject,
298 PLSAPR_POLICY_DNS_DOMAIN_INFO Info);
299
300 NTSTATUS
301 LsarSetLocalAccountDomain(PLSA_DB_OBJECT PolicyObject,
302 PLSAPR_POLICY_ACCOUNT_DOM_INFO Info);
303
304 /* privileges.c */
305 NTSTATUS
306 LsarpLookupPrivilegeName(PLUID Value,
307 PRPC_UNICODE_STRING *Name);
308
309 NTSTATUS
310 LsarpLookupPrivilegeValue(PRPC_UNICODE_STRING Name,
311 PLUID Value);
312
313 NTSTATUS
314 LsarpEnumeratePrivileges(DWORD *EnumerationContext,
315 PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer,
316 DWORD PreferedMaximumLength);
317
318 NTSTATUS
319 LsapLookupAccountRightName(ULONG RightValue,
320 PRPC_UNICODE_STRING *Name);
321
322 /* registry.h */
323 NTSTATUS
324 LsapRegCloseKey(IN HANDLE KeyHandle);
325
326 NTSTATUS
327 LsapRegCreateKey(IN HANDLE ParentKeyHandle,
328 IN LPCWSTR KeyName,
329 IN ACCESS_MASK DesiredAccess,
330 OUT HANDLE KeyHandle);
331
332 NTSTATUS
333 LsapRegDeleteSubKey(IN HANDLE ParentKeyHandle,
334 IN LPCWSTR KeyName);
335
336 NTSTATUS
337 LsapRegDeleteKey(IN HANDLE KeyHandle);
338
339 NTSTATUS
340 LsapRegEnumerateSubKey(IN HANDLE KeyHandle,
341 IN ULONG Index,
342 IN ULONG Length,
343 OUT LPWSTR Buffer);
344
345 NTSTATUS
346 LsapRegOpenKey(IN HANDLE ParentKeyHandle,
347 IN LPCWSTR KeyName,
348 IN ACCESS_MASK DesiredAccess,
349 OUT HANDLE KeyHandle);
350
351 NTSTATUS
352 LsapRegQueryKeyInfo(IN HANDLE KeyHandle,
353 OUT PULONG SubKeyCount,
354 OUT PULONG ValueCount);
355
356 NTSTATUS
357 LsapRegDeleteValue(IN HANDLE KeyHandle,
358 IN LPWSTR ValueName);
359
360 NTSTATUS
361 LsapRegEnumerateValue(IN HANDLE KeyHandle,
362 IN ULONG Index,
363 OUT LPWSTR Name,
364 IN OUT PULONG NameLength,
365 OUT PULONG Type OPTIONAL,
366 OUT PVOID Data OPTIONAL,
367 IN OUT PULONG DataLength OPTIONAL);
368
369 NTSTATUS
370 LsapRegQueryValue(IN HANDLE KeyHandle,
371 IN LPWSTR ValueName,
372 OUT PULONG Type OPTIONAL,
373 OUT LPVOID Data OPTIONAL,
374 IN OUT PULONG DataLength OPTIONAL);
375
376 NTSTATUS
377 LsapRegSetValue(IN HANDLE KeyHandle,
378 IN LPWSTR ValueName,
379 IN ULONG Type,
380 IN LPVOID Data,
381 IN ULONG DataLength);
382
383 /* security.c */
384 NTSTATUS
385 LsapCreatePolicySd(PSECURITY_DESCRIPTOR *PolicySd,
386 PULONG PolicySdSize);
387
388 NTSTATUS
389 LsapCreateAccountSd(PSECURITY_DESCRIPTOR *AccountSd,
390 PULONG AccountSdSize);
391
392 NTSTATUS
393 LsapCreateSecretSd(PSECURITY_DESCRIPTOR *SecretSd,
394 PULONG SecretSdSize);
395
396 /* session.c */
397 VOID
398 LsapInitLogonSessions(VOID);
399
400 NTSTATUS
401 NTAPI
402 LsapCreateLogonSession(IN PLUID LogonId);
403
404 NTSTATUS
405 NTAPI
406 LsapDeleteLogonSession(IN PLUID LogonId);
407
408 NTSTATUS
409 LsapSetLogonSessionData(IN PLUID LogonId);
410
411 /* utils.c */
412 INT
413 LsapLoadString(HINSTANCE hInstance,
414 UINT uId,
415 LPWSTR lpBuffer,
416 INT nBufferMax);
417
418 /* EOF */