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