KD System Rewrite:
[reactos.git] / reactos / include / ntsecapi.h
1 /*
2 * Copyright (C) 1999 Juergen Schmied
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19 #ifdef __USE_W32API
20 #include_next <ntsecapi.h>
21 #else
22
23 #ifndef __WINE_NTSECAPI_H
24 #define __WINE_NTSECAPI_H
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* defined(__cplusplus) */
29
30 typedef enum _SECURITY_LOGON_TYPE {
31 Interactive = 2,
32 Network,
33 Batch,
34 Service,
35 Proxy,
36 Unlock,
37 NetworkCleartext,
38 NewCredentials,
39 RemoteInteractive,
40 CachedInteractive,
41 CachedRemoteInteractive,
42 CachedUnlock
43 } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
44
45 typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS {
46
47 PolicyNotifyAuditEventsInformation = 1,
48 PolicyNotifyAccountDomainInformation,
49 PolicyNotifyServerRoleInformation,
50 PolicyNotifyDnsDomainInformation,
51 PolicyNotifyDomainEfsInformation,
52 PolicyNotifyDomainKerberosTicketInformation,
53 PolicyNotifyMachineAccountPasswordInformation
54
55 } POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS;
56
57 typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
58
59 /* Policy access rights */
60 #define POLICY_VIEW_LOCAL_INFORMATION 0x00000001L
61 #define POLICY_VIEW_AUDIT_INFORMATION 0x00000002L
62 #define POLICY_GET_PRIVATE_INFORMATION 0x00000004L
63 #define POLICY_TRUST_ADMIN 0x00000008L
64 #define POLICY_CREATE_ACCOUNT 0x00000010L
65 #define POLICY_CREATE_SECRET 0x00000020L
66 #define POLICY_CREATE_PRIVILEGE 0x00000040L
67 #define POLICY_SET_DEFAULT_QUOTA_LIMITS 0x00000080L
68 #define POLICY_SET_AUDIT_REQUIREMENTS 0x00000100L
69 #define POLICY_AUDIT_LOG_ADMIN 0x00000200L
70 #define POLICY_SERVER_ADMIN 0x00000400L
71 #define POLICY_LOOKUP_NAMES 0x00000800L
72 #define POLICY_NOTIFICATION 0x00001000L
73
74 #define POLICY_ALL_ACCESS ( \
75 STANDARD_RIGHTS_REQUIRED | \
76 POLICY_VIEW_LOCAL_INFORMATION | \
77 POLICY_VIEW_AUDIT_INFORMATION | \
78 POLICY_GET_PRIVATE_INFORMATION | \
79 POLICY_TRUST_ADMIN | \
80 POLICY_CREATE_ACCOUNT | \
81 POLICY_CREATE_SECRET | \
82 POLICY_CREATE_PRIVILEGE | \
83 POLICY_SET_DEFAULT_QUOTA_LIMITS | \
84 POLICY_SET_AUDIT_REQUIREMENTS | \
85 POLICY_AUDIT_LOG_ADMIN | \
86 POLICY_SERVER_ADMIN | \
87 POLICY_LOOKUP_NAMES)
88
89
90 #define POLICY_READ ( \
91 STANDARD_RIGHTS_READ | \
92 POLICY_VIEW_AUDIT_INFORMATION | \
93 POLICY_GET_PRIVATE_INFORMATION)
94
95 #define POLICY_WRITE ( \
96 STANDARD_RIGHTS_WRITE | \
97 POLICY_TRUST_ADMIN | \
98 POLICY_CREATE_ACCOUNT | \
99 POLICY_CREATE_SECRET | \
100 POLICY_CREATE_PRIVILEGE | \
101 POLICY_SET_DEFAULT_QUOTA_LIMITS | \
102 POLICY_SET_AUDIT_REQUIREMENTS | \
103 POLICY_AUDIT_LOG_ADMIN | \
104 POLICY_SERVER_ADMIN)
105
106 #define POLICY_EXECUTE ( \
107 STANDARD_RIGHTS_EXECUTE | \
108 POLICY_VIEW_LOCAL_INFORMATION | \
109 POLICY_LOOKUP_NAMES)
110
111 typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
112 /* FIXME: Microsoft declares an LSA_STRING as ascii but changing this breaks secur32.dll so someone will need to figure out what to do here */
113 typedef struct _LSA_STRING
114 {
115 USHORT Length;
116 USHORT MaximumLength;
117 PWSTR Buffer;
118 } LSA_STRING, *PLSA_STRING;
119 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
120
121 typedef PVOID LSA_HANDLE, *PLSA_HANDLE;
122
123 typedef enum
124 {
125 PolicyAuditLogInformation = 1,
126 PolicyAuditEventsInformation,
127 PolicyPrimaryDomainInformation,
128 PolicyPdAccountInformation,
129 PolicyAccountDomainInformation,
130 PolicyLsaServerRoleInformation,
131 PolicyReplicaSourceInformation,
132 PolicyDefaultQuotaInformation,
133 PolicyModificationInformation,
134 PolicyAuditFullSetInformation,
135 PolicyAuditFullQueryInformation,
136 PolicyDnsDomainInformation,
137 PolicyEfsInformation
138 } POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS;
139
140 typedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS;
141
142 typedef struct _POLICY_AUDIT_EVENTS_INFO
143 {
144 WINBOOL AuditingMode;
145 PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
146 ULONG MaximumAuditEventCount;
147 } POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO;
148
149 typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO {
150
151 PSID Sid;
152 LSA_UNICODE_STRING DnsName;
153 LSA_UNICODE_STRING NetbiosName;
154
155 } LSA_FOREST_TRUST_DOMAIN_INFO, *PLSA_FOREST_TRUST_DOMAIN_INFO;
156
157
158 #define MAX_FOREST_TRUST_BINARY_DATA_SIZE ( 128 * 1024 )
159
160 typedef struct _LSA_FOREST_TRUST_BINARY_DATA {
161
162 ULONG Length;
163 PUCHAR Buffer;
164
165 } LSA_FOREST_TRUST_BINARY_DATA, *PLSA_FOREST_TRUST_BINARY_DATA;
166
167 typedef enum {
168
169 ForestTrustTopLevelName,
170 ForestTrustTopLevelNameEx,
171 ForestTrustDomainInfo,
172 ForestTrustRecordTypeLast = ForestTrustDomainInfo
173
174 } LSA_FOREST_TRUST_RECORD_TYPE;
175
176 typedef struct _LSA_AUTH_INFORMATION {
177
178 LARGE_INTEGER LastUpdateTime;
179 ULONG AuthType;
180 ULONG AuthInfoLength;
181 PUCHAR AuthInfo;
182 } LSA_AUTH_INFORMATION, *PLSA_AUTH_INFORMATION;
183
184 typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION {
185
186 ULONG IncomingAuthInfos;
187 PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
188 PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
189 ULONG OutgoingAuthInfos;
190 PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
191 PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
192
193 } TRUSTED_DOMAIN_AUTH_INFORMATION, *PTRUSTED_DOMAIN_AUTH_INFORMATION;
194
195 typedef struct _LSA_FOREST_TRUST_RECORD {
196
197 ULONG Flags;
198 LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType;
199 LARGE_INTEGER Time;
200
201
202 union {
203
204 LSA_UNICODE_STRING TopLevelName;
205 LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo;
206 LSA_FOREST_TRUST_BINARY_DATA Data;
207 } ForestTrustData;
208
209 } LSA_FOREST_TRUST_RECORD, *PLSA_FOREST_TRUST_RECORD;
210
211 typedef struct _LSA_TRANSLATED_SID {
212
213 SID_NAME_USE Use;
214 ULONG RelativeId;
215 LONG DomainIndex;
216
217 } LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID;
218
219 typedef struct _LSA_TRANSLATED_SID2 {
220
221 SID_NAME_USE Use;
222 PSID Sid;
223 LONG DomainIndex;
224 ULONG Flags;
225
226 } LSA_TRANSLATED_SID2, *PLSA_TRANSLATED_SID2;
227
228 typedef struct _LSA_TRANSLATED_NAME {
229
230 SID_NAME_USE Use;
231 LSA_UNICODE_STRING Name;
232 LONG DomainIndex;
233
234 } LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME;
235
236 typedef enum {
237
238 CollisionTdo,
239 CollisionXref,
240 CollisionOther
241
242 } LSA_FOREST_TRUST_COLLISION_RECORD_TYPE;
243
244 typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD {
245
246 ULONG Index;
247 LSA_FOREST_TRUST_COLLISION_RECORD_TYPE Type;
248 ULONG Flags;
249 LSA_UNICODE_STRING Name;
250
251 } LSA_FOREST_TRUST_COLLISION_RECORD, *PLSA_FOREST_TRUST_COLLISION_RECORD;
252
253 typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION {
254
255 ULONG RecordCount;
256 PLSA_FOREST_TRUST_COLLISION_RECORD * Entries;
257
258 } LSA_FOREST_TRUST_COLLISION_INFORMATION, *PLSA_FOREST_TRUST_COLLISION_INFORMATION;
259
260 typedef struct _TRUSTED_DOMAIN_INFORMATION_EX {
261
262 LSA_UNICODE_STRING Name;
263 LSA_UNICODE_STRING FlatName;
264 PSID Sid;
265 ULONG TrustDirection;
266 ULONG TrustType;
267 ULONG TrustAttributes;
268
269 } TRUSTED_DOMAIN_INFORMATION_EX, *PTRUSTED_DOMAIN_INFORMATION_EX;
270
271 typedef ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE;
272
273 typedef struct _LSA_TRUST_INFORMATION {
274
275 LSA_UNICODE_STRING Name;
276 PSID Sid;
277
278 } LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION;
279
280 typedef struct _LSA_REFERENCED_DOMAIN_LIST {
281
282 ULONG Entries;
283 PLSA_TRUST_INFORMATION Domains;
284
285 } LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST;
286
287 typedef enum _POLICY_DOMAIN_INFORMATION_CLASS {
288
289 PolicyDomainEfsInformation = 2,
290 PolicyDomainKerberosTicketInformation
291
292 } POLICY_DOMAIN_INFORMATION_CLASS, *PPOLICY_DOMAIN_INFORMATION_CLASS;
293
294 typedef struct _POLICY_PRIMARY_DOMAIN_INFO
295 {
296 LSA_UNICODE_STRING Name;
297 PSID Sid;
298 } POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO;
299
300 typedef struct _POLICY_ACCOUNT_DOMAIN_INFO
301 {
302 LSA_UNICODE_STRING DomainName;
303 PSID DomainSid;
304 } POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO;
305
306 typedef struct _LSA_FOREST_TRUST_INFORMATION {
307
308 ULONG RecordCount;
309 PLSA_FOREST_TRUST_RECORD * Entries;
310
311 } LSA_FOREST_TRUST_INFORMATION, *PLSA_FOREST_TRUST_INFORMATION;
312
313 typedef struct _SECURITY_LOGON_SESSION_DATA {
314 ULONG Size ;
315 LUID LogonId ;
316 LSA_UNICODE_STRING UserName ;
317 LSA_UNICODE_STRING LogonDomain ;
318 LSA_UNICODE_STRING AuthenticationPackage ;
319 ULONG LogonType ;
320 ULONG Session ;
321 PSID Sid ;
322 LARGE_INTEGER LogonTime ;
323 LSA_UNICODE_STRING LogonServer ;
324 LSA_UNICODE_STRING DnsDomainName ;
325 LSA_UNICODE_STRING Upn ;
326 } SECURITY_LOGON_SESSION_DATA, * PSECURITY_LOGON_SESSION_DATA ;
327
328 typedef enum _TRUSTED_INFORMATION_CLASS {
329
330 TrustedDomainNameInformation = 1,
331 TrustedControllersInformation,
332 TrustedPosixOffsetInformation,
333 TrustedPasswordInformation,
334 TrustedDomainInformationBasic,
335 TrustedDomainInformationEx,
336 TrustedDomainAuthInformation,
337 TrustedDomainFullInformation,
338 TrustedDomainAuthInformationInternal,
339 TrustedDomainFullInformationInternal,
340 TrustedDomainInformationEx2Internal,
341 TrustedDomainFullInformation2Internal,
342
343 } TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS;
344
345 ULONG
346 STDCALL
347 LsaNtStatusToWinError(NTSTATUS Status);
348 NTSTATUS
349 STDCALL
350 LsaOpenPolicy(PLSA_UNICODE_STRING lsaucs,PLSA_OBJECT_ATTRIBUTES lsaoa,ACCESS_MASK access,PLSA_HANDLE lsah);
351 NTSTATUS
352 STDCALL
353 LsaQueryInformationPolicy(LSA_HANDLE lsah,POLICY_INFORMATION_CLASS pic,PVOID* pv);
354 NTSTATUS
355 STDCALL
356 LsaFreeMemory(PVOID pv);
357 NTSTATUS
358 STDCALL
359 LsaClose(LSA_HANDLE ObjectHandle);
360 NTSTATUS
361 STDCALL
362 LsaAddAccountRights(
363 LSA_HANDLE PolicyHandle,
364 PSID AccountSid,
365 PLSA_UNICODE_STRING UserRights,
366 ULONG CountOfRights
367 );
368 NTSTATUS
369 STDCALL
370 LsaCreateTrustedDomainEx(
371 LSA_HANDLE PolicyHandle,
372 PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
373 PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation,
374 ACCESS_MASK DesiredAccess,
375 PLSA_HANDLE TrustedDomainHandle
376 );
377 NTSTATUS
378 STDCALL
379 LsaDeleteTrustedDomain(
380 LSA_HANDLE PolicyHandle,
381 PSID TrustedDomainSid
382 );
383 NTSTATUS
384 STDCALL
385 LsaEnumerateAccountRights(
386 LSA_HANDLE PolicyHandle,
387 PSID AccountSid,
388 PLSA_UNICODE_STRING *UserRights,
389 PULONG CountOfRights
390 );
391 NTSTATUS
392 STDCALL
393 LsaEnumerateAccountsWithUserRight(
394 LSA_HANDLE PolicyHandle,
395 OPTIONAL PLSA_UNICODE_STRING UserRights,
396 PVOID *EnumerationBuffer,
397 PULONG CountReturned
398 );
399 NTSTATUS
400 STDCALL
401 LsaEnumerateTrustedDomains(
402 LSA_HANDLE PolicyHandle,
403 PLSA_ENUMERATION_HANDLE EnumerationContext,
404 PVOID *Buffer,
405 ULONG PreferedMaximumLength,
406 PULONG CountReturned
407 );
408 NTSTATUS
409 STDCALL
410 LsaEnumerateTrustedDomainsEx(
411 LSA_HANDLE PolicyHandle,
412 PLSA_ENUMERATION_HANDLE EnumerationContext,
413 PVOID *Buffer,
414 ULONG PreferedMaximumLength,
415 PULONG CountReturned
416 );
417 NTSTATUS
418 STDCALL
419 LsaLookupNames(
420 LSA_HANDLE PolicyHandle,
421 ULONG Count,
422 PLSA_UNICODE_STRING Names,
423 PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
424 PLSA_TRANSLATED_SID *Sids
425 );
426 NTSTATUS
427 STDCALL
428 LsaLookupNames2(
429 LSA_HANDLE PolicyHandle,
430 ULONG Flags,
431 ULONG Count,
432 PLSA_UNICODE_STRING Names,
433 PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
434 PLSA_TRANSLATED_SID2 *Sids
435 );
436 NTSTATUS
437 STDCALL
438 LsaLookupSids(
439 LSA_HANDLE PolicyHandle,
440 ULONG Count,
441 PSID *Sids,
442 PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
443 PLSA_TRANSLATED_NAME *Names
444 );
445 NTSTATUS
446 STDCALL
447 LsaOpenTrustedDomainByName(
448 LSA_HANDLE PolicyHandle,
449 PLSA_UNICODE_STRING TrustedDomainName,
450 ACCESS_MASK DesiredAccess,
451 PLSA_HANDLE TrustedDomainHandle
452 );
453 NTSTATUS
454 STDCALL
455 LsaQueryDomainInformationPolicy(
456 LSA_HANDLE PolicyHandle,
457 POLICY_DOMAIN_INFORMATION_CLASS InformationClass,
458 PVOID *Buffer
459 );
460 NTSTATUS
461 STDCALL
462 LsaQueryForestTrustInformation(
463 LSA_HANDLE PolicyHandle,
464 PLSA_UNICODE_STRING TrustedDomainName,
465 PLSA_FOREST_TRUST_INFORMATION * ForestTrustInfo
466 );
467 NTSTATUS
468 STDCALL
469 LsaQueryTrustedDomainInfoByName(
470 LSA_HANDLE PolicyHandle,
471 PLSA_UNICODE_STRING TrustedDomainName,
472 TRUSTED_INFORMATION_CLASS InformationClass,
473 PVOID *Buffer
474 );
475 NTSTATUS
476 STDCALL
477 LsaQueryTrustedDomainInfo(
478 LSA_HANDLE PolicyHandle,
479 PSID TrustedDomainSid,
480 TRUSTED_INFORMATION_CLASS InformationClass,
481 PVOID *Buffer
482 );
483 NTSTATUS
484 STDCALL
485 LsaRemoveAccountRights(
486 LSA_HANDLE PolicyHandle,
487 PSID AccountSid,
488 BOOLEAN AllRights,
489 PLSA_UNICODE_STRING UserRights,
490 ULONG CountOfRights
491 );
492 NTSTATUS
493 STDCALL
494 LsaRetrievePrivateData(
495 LSA_HANDLE PolicyHandle,
496 PLSA_UNICODE_STRING KeyName,
497 PLSA_UNICODE_STRING * PrivateData
498 );
499 NTSTATUS
500 STDCALL
501 LsaSetDomainInformationPolicy(
502 LSA_HANDLE PolicyHandle,
503 POLICY_DOMAIN_INFORMATION_CLASS InformationClass,
504 PVOID Buffer
505 );
506 NTSTATUS
507 STDCALL
508 LsaSetInformationPolicy(
509 LSA_HANDLE PolicyHandle,
510 POLICY_INFORMATION_CLASS InformationClass,
511 PVOID Buffer
512 );
513 NTSTATUS
514 STDCALL
515 LsaSetForestTrustInformation(
516 LSA_HANDLE PolicyHandle,
517 PLSA_UNICODE_STRING TrustedDomainName,
518 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo,
519 WINBOOL CheckOnly,
520 PLSA_FOREST_TRUST_COLLISION_INFORMATION * CollisionInfo
521 );
522 NTSTATUS
523 STDCALL
524 LsaSetTrustedDomainInfoByName(
525 LSA_HANDLE PolicyHandle,
526 PLSA_UNICODE_STRING TrustedDomainName,
527 TRUSTED_INFORMATION_CLASS InformationClass,
528 PVOID Buffer
529 );
530 NTSTATUS
531 STDCALL
532 LsaSetTrustedDomainInformation(
533 LSA_HANDLE PolicyHandle,
534 PSID TrustedDomainSid,
535 TRUSTED_INFORMATION_CLASS InformationClass,
536 PVOID Buffer
537 );
538 NTSTATUS
539 STDCALL
540 LsaStorePrivateData(
541 LSA_HANDLE PolicyHandle,
542 PLSA_UNICODE_STRING KeyName,
543 PLSA_UNICODE_STRING PrivateData
544 );
545 NTSTATUS
546 STDCALL
547 LsaEnumerateLogonSessions(
548 PULONG LogonSessionCount,
549 PLUID * LogonSessionList
550 );
551
552 NTSTATUS
553 STDCALL
554 LsaGetLogonSessionData(
555 PLUID LogonId,
556 PSECURITY_LOGON_SESSION_DATA * ppLogonSessionData
557 );
558 NTSTATUS
559 STDCALL
560 LsaRegisterPolicyChangeNotification(
561 POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass,
562 HANDLE NotificationEventHandle
563 );
564
565 NTSTATUS
566 STDCALL
567 LsaUnregisterPolicyChangeNotification(
568 POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass,
569 HANDLE NotificationEventHandle
570 );
571
572
573 #ifdef __cplusplus
574 } /* extern "C" */
575 #endif /* defined(__cplusplus) */
576
577 #endif /* !defined(__WINE_NTSECAPI_H) */
578
579 #endif /* __USE_W32API */