1/** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6#ifndef _NTSECAPI_ 7#define _NTSECAPI_ 8 9#ifdef __cplusplus 10extern "C" { 11#endif 12 13#if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK) 14#define _NTSTATUS_PSDK 15 typedef LONG NTSTATUS,*PNTSTATUS; 16#endif 17 18#ifndef _NTLSA_IFS_ 19 typedef ULONG LSA_OPERATIONAL_MODE,*PLSA_OPERATIONAL_MODE; 20#endif 21 22#define LSA_MODE_PASSWORD_PROTECTED (__MSABI_LONG(0x00000001)) 23#define LSA_MODE_INDIVIDUAL_ACCOUNTS (__MSABI_LONG(0x00000002)) 24#define LSA_MODE_MANDATORY_ACCESS (__MSABI_LONG(0x00000004)) 25#define LSA_MODE_LOG_FULL (__MSABI_LONG(0x00000008)) 26 27#ifndef _NTLSA_IFS_ 28 typedef enum _SECURITY_LOGON_TYPE { 29 Interactive = 2,Network,Batch,Service,Proxy,Unlock,NetworkCleartext,NewCredentials,RemoteInteractive,CachedInteractive, 30 CachedRemoteInteractive,CachedUnlock 31 } SECURITY_LOGON_TYPE,*PSECURITY_LOGON_TYPE; 32#endif 33 34#ifndef _NTLSA_IFS_ 35 36#ifndef _NTLSA_AUDIT_ 37#define _NTLSA_AUDIT_ 38 39 typedef enum _SE_ADT_PARAMETER_TYPE { 40 SeAdtParmTypeNone = 0,SeAdtParmTypeString,SeAdtParmTypeFileSpec,SeAdtParmTypeUlong,SeAdtParmTypeSid,SeAdtParmTypeLogonId, 41 SeAdtParmTypeNoLogonId,SeAdtParmTypeAccessMask,SeAdtParmTypePrivs,SeAdtParmTypeObjectTypes,SeAdtParmTypeHexUlong,SeAdtParmTypePtr, 42 SeAdtParmTypeTime,SeAdtParmTypeGuid,SeAdtParmTypeLuid,SeAdtParmTypeHexInt64,SeAdtParmTypeStringList,SeAdtParmTypeSidList, 43 SeAdtParmTypeDuration,SeAdtParmTypeUserAccountControl,SeAdtParmTypeNoUac,SeAdtParmTypeMessage,SeAdtParmTypeDateTime,SeAdtParmTypeSockAddr 44 } SE_ADT_PARAMETER_TYPE,*PSE_ADT_PARAMETER_TYPE; 45 46#include <guiddef.h> 47 48#define SE_ADT_OBJECT_ONLY 0x1 49 50 typedef struct _SE_ADT_OBJECT_TYPE { 51 GUID ObjectType; 52 USHORT Flags; 53 USHORT Level; 54 ACCESS_MASK AccessMask; 55 } SE_ADT_OBJECT_TYPE,*PSE_ADT_OBJECT_TYPE; 56 57 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY { 58 SE_ADT_PARAMETER_TYPE Type; 59 ULONG Length; 60 ULONG_PTR Data[2]; 61 PVOID Address; 62 } SE_ADT_PARAMETER_ARRAY_ENTRY,*PSE_ADT_PARAMETER_ARRAY_ENTRY; 63 64#define SE_MAX_AUDIT_PARAMETERS 32 65#define SE_MAX_GENERIC_AUDIT_PARAMETERS 28 66 67 typedef struct _SE_ADT_PARAMETER_ARRAY { 68 ULONG CategoryId; 69 ULONG AuditId; 70 ULONG ParameterCount; 71 ULONG Length; 72 USHORT Type; 73 ULONG Flags; 74 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[SE_MAX_AUDIT_PARAMETERS ]; 75 } SE_ADT_PARAMETER_ARRAY,*PSE_ADT_PARAMETER_ARRAY; 76 77#define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001 78#endif 79#endif 80 81 typedef enum _POLICY_AUDIT_EVENT_TYPE { 82 AuditCategorySystem = 0,AuditCategoryLogon,AuditCategoryObjectAccess,AuditCategoryPrivilegeUse,AuditCategoryDetailedTracking, 83 AuditCategoryPolicyChange,AuditCategoryAccountManagement,AuditCategoryDirectoryServiceAccess,AuditCategoryAccountLogon 84 } POLICY_AUDIT_EVENT_TYPE,*PPOLICY_AUDIT_EVENT_TYPE; 85 86#define POLICY_AUDIT_EVENT_UNCHANGED (__MSABI_LONG(0x00000000)) 87#define POLICY_AUDIT_EVENT_SUCCESS (__MSABI_LONG(0x00000001)) 88#define POLICY_AUDIT_EVENT_FAILURE (__MSABI_LONG(0x00000002)) 89#define POLICY_AUDIT_EVENT_NONE (__MSABI_LONG(0x00000004)) 90#define POLICY_AUDIT_EVENT_MASK (POLICY_AUDIT_EVENT_SUCCESS | POLICY_AUDIT_EVENT_FAILURE | POLICY_AUDIT_EVENT_UNCHANGED | POLICY_AUDIT_EVENT_NONE) 91 92#ifdef _NTDEF_ 93 typedef UNICODE_STRING LSA_UNICODE_STRING,*PLSA_UNICODE_STRING; 94 typedef STRING LSA_STRING,*PLSA_STRING; 95 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES,*PLSA_OBJECT_ATTRIBUTES; 96#else 97 98#ifndef _NO_W32_PSEUDO_MODIFIERS 99#ifndef IN 100#define IN 101#endif 102#ifndef OUT 103#define OUT 104#endif 105#ifndef OPTIONAL 106#define OPTIONAL 107#endif 108#endif 109 110 typedef struct _LSA_UNICODE_STRING { 111 USHORT Length; 112 USHORT MaximumLength; 113 PWSTR Buffer; 114 } LSA_UNICODE_STRING,*PLSA_UNICODE_STRING; 115 116 typedef struct _LSA_STRING { 117 USHORT Length; 118 USHORT MaximumLength; 119 PCHAR Buffer; 120 } LSA_STRING,*PLSA_STRING; 121 122 typedef struct _LSA_OBJECT_ATTRIBUTES { 123 ULONG Length; 124 HANDLE RootDirectory; 125 PLSA_UNICODE_STRING ObjectName; 126 ULONG Attributes; 127 PVOID SecurityDescriptor; 128 PVOID SecurityQualityOfService; 129 } LSA_OBJECT_ATTRIBUTES,*PLSA_OBJECT_ATTRIBUTES; 130#endif 131 132#define LSA_SUCCESS(Error) ((LONG)(Error) >= 0) 133 134#ifndef _NTLSA_IFS_ 135 NTSTATUS NTAPI LsaRegisterLogonProcess(PLSA_STRING LogonProcessName,PHANDLE LsaHandle,PLSA_OPERATIONAL_MODE SecurityMode); 136 NTSTATUS NTAPI LsaLogonUser(HANDLE LsaHandle,PLSA_STRING OriginName,SECURITY_LOGON_TYPE LogonType,ULONG AuthenticationPackage,PVOID AuthenticationInformation,ULONG AuthenticationInformationLength,PTOKEN_GROUPS LocalGroups,PTOKEN_SOURCE SourceContext,PVOID *ProfileBuffer,PULONG ProfileBufferLength,PLUID LogonId,PHANDLE Token,PQUOTA_LIMITS Quotas,PNTSTATUS SubStatus); 137 NTSTATUS NTAPI LsaLookupAuthenticationPackage(HANDLE LsaHandle,PLSA_STRING PackageName,PULONG AuthenticationPackage); 138 NTSTATUS NTAPI LsaFreeReturnBuffer (PVOID Buffer); 139 NTSTATUS NTAPI LsaCallAuthenticationPackage(HANDLE LsaHandle,ULONG AuthenticationPackage,PVOID ProtocolSubmitBuffer,ULONG SubmitBufferLength,PVOID *ProtocolReturnBuffer,PULONG ReturnBufferLength,PNTSTATUS ProtocolStatus); 140 NTSTATUS NTAPI LsaDeregisterLogonProcess(HANDLE LsaHandle); 141 NTSTATUS NTAPI LsaConnectUntrusted(PHANDLE LsaHandle); 142#endif 143 144#define POLICY_VIEW_LOCAL_INFORMATION __MSABI_LONG(0x00000001) 145#define POLICY_VIEW_AUDIT_INFORMATION __MSABI_LONG(0x00000002) 146#define POLICY_GET_PRIVATE_INFORMATION __MSABI_LONG(0x00000004) 147#define POLICY_TRUST_ADMIN __MSABI_LONG(0x00000008) 148#define POLICY_CREATE_ACCOUNT __MSABI_LONG(0x00000010) 149#define POLICY_CREATE_SECRET __MSABI_LONG(0x00000020) 150#define POLICY_CREATE_PRIVILEGE __MSABI_LONG(0x00000040) 151#define POLICY_SET_DEFAULT_QUOTA_LIMITS __MSABI_LONG(0x00000080) 152#define POLICY_SET_AUDIT_REQUIREMENTS __MSABI_LONG(0x00000100) 153#define POLICY_AUDIT_LOG_ADMIN __MSABI_LONG(0x00000200) 154#define POLICY_SERVER_ADMIN __MSABI_LONG(0x00000400) 155#define POLICY_LOOKUP_NAMES __MSABI_LONG(0x00000800) 156#define POLICY_NOTIFICATION __MSABI_LONG(0x00001000) 157 158#define POLICY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | POLICY_VIEW_LOCAL_INFORMATION | POLICY_VIEW_AUDIT_INFORMATION | POLICY_GET_PRIVATE_INFORMATION | POLICY_TRUST_ADMIN | POLICY_CREATE_ACCOUNT | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE | POLICY_SET_DEFAULT_QUOTA_LIMITS | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN | POLICY_SERVER_ADMIN | POLICY_LOOKUP_NAMES) 159#define POLICY_READ (STANDARD_RIGHTS_READ | POLICY_VIEW_AUDIT_INFORMATION | POLICY_GET_PRIVATE_INFORMATION) 160#define POLICY_WRITE (STANDARD_RIGHTS_WRITE | POLICY_TRUST_ADMIN | POLICY_CREATE_ACCOUNT | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE | POLICY_SET_DEFAULT_QUOTA_LIMITS | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN | POLICY_SERVER_ADMIN) 161#define POLICY_EXECUTE (STANDARD_RIGHTS_EXECUTE | POLICY_VIEW_LOCAL_INFORMATION | POLICY_LOOKUP_NAMES) 162 163 typedef struct _LSA_TRUST_INFORMATION { 164 LSA_UNICODE_STRING Name; 165 PSID Sid; 166 } LSA_TRUST_INFORMATION,*PLSA_TRUST_INFORMATION; 167 168 typedef struct _LSA_REFERENCED_DOMAIN_LIST { 169 ULONG Entries; 170 PLSA_TRUST_INFORMATION Domains; 171 } LSA_REFERENCED_DOMAIN_LIST,*PLSA_REFERENCED_DOMAIN_LIST; 172 173 typedef struct _LSA_TRANSLATED_SID { 174 SID_NAME_USE Use; 175 ULONG RelativeId; 176 LONG DomainIndex; 177 } LSA_TRANSLATED_SID,*PLSA_TRANSLATED_SID; 178 179 typedef struct _LSA_TRANSLATED_SID2 { 180 SID_NAME_USE Use; 181 PSID Sid; 182 LONG DomainIndex; 183 ULONG Flags; 184 } LSA_TRANSLATED_SID2,*PLSA_TRANSLATED_SID2; 185 186 typedef struct _LSA_TRANSLATED_NAME { 187 SID_NAME_USE Use; 188 LSA_UNICODE_STRING Name; 189 LONG DomainIndex; 190 } LSA_TRANSLATED_NAME,*PLSA_TRANSLATED_NAME; 191 192 typedef enum _POLICY_LSA_SERVER_ROLE { 193 PolicyServerRoleBackup = 2,PolicyServerRolePrimary 194 } POLICY_LSA_SERVER_ROLE,*PPOLICY_LSA_SERVER_ROLE; 195 196 typedef ULONG POLICY_AUDIT_EVENT_OPTIONS,*PPOLICY_AUDIT_EVENT_OPTIONS; 197 198 typedef enum _POLICY_INFORMATION_CLASS { 199 PolicyAuditLogInformation = 1,PolicyAuditEventsInformation,PolicyPrimaryDomainInformation,PolicyPdAccountInformation, 200 PolicyAccountDomainInformation,PolicyLsaServerRoleInformation,PolicyReplicaSourceInformation,PolicyDefaultQuotaInformation, 201 PolicyModificationInformation,PolicyAuditFullSetInformation,PolicyAuditFullQueryInformation,PolicyDnsDomainInformation, 202 PolicyDnsDomainInformationInt 203 } POLICY_INFORMATION_CLASS,*PPOLICY_INFORMATION_CLASS; 204 205 typedef struct _POLICY_AUDIT_LOG_INFO { 206 ULONG AuditLogPercentFull; 207 ULONG MaximumLogSize; 208 LARGE_INTEGER AuditRetentionPeriod; 209 BOOLEAN AuditLogFullShutdownInProgress; 210 LARGE_INTEGER TimeToShutdown; 211 ULONG NextAuditRecordId; 212 } POLICY_AUDIT_LOG_INFO,*PPOLICY_AUDIT_LOG_INFO; 213 214 typedef struct _POLICY_AUDIT_EVENTS_INFO { 215 BOOLEAN AuditingMode; 216 PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions; 217 ULONG MaximumAuditEventCount; 218 } POLICY_AUDIT_EVENTS_INFO,*PPOLICY_AUDIT_EVENTS_INFO; 219 220 typedef struct _POLICY_ACCOUNT_DOMAIN_INFO { 221 LSA_UNICODE_STRING DomainName; 222 PSID DomainSid; 223 } POLICY_ACCOUNT_DOMAIN_INFO,*PPOLICY_ACCOUNT_DOMAIN_INFO; 224 225 typedef struct _POLICY_PRIMARY_DOMAIN_INFO { 226 LSA_UNICODE_STRING Name; 227 PSID Sid; 228 } POLICY_PRIMARY_DOMAIN_INFO,*PPOLICY_PRIMARY_DOMAIN_INFO; 229 230 typedef struct _POLICY_DNS_DOMAIN_INFO { 231 LSA_UNICODE_STRING Name; 232 LSA_UNICODE_STRING DnsDomainName; 233 LSA_UNICODE_STRING DnsForestName; 234 GUID DomainGuid; 235 PSID Sid; 236 } POLICY_DNS_DOMAIN_INFO,*PPOLICY_DNS_DOMAIN_INFO; 237 238 typedef struct _POLICY_PD_ACCOUNT_INFO { 239 LSA_UNICODE_STRING Name; 240 } POLICY_PD_ACCOUNT_INFO,*PPOLICY_PD_ACCOUNT_INFO; 241 242 typedef struct _POLICY_LSA_SERVER_ROLE_INFO { 243 POLICY_LSA_SERVER_ROLE LsaServerRole; 244 } POLICY_LSA_SERVER_ROLE_INFO,*PPOLICY_LSA_SERVER_ROLE_INFO; 245 246 typedef struct _POLICY_REPLICA_SOURCE_INFO { 247 LSA_UNICODE_STRING ReplicaSource; 248 LSA_UNICODE_STRING ReplicaAccountName; 249 } POLICY_REPLICA_SOURCE_INFO,*PPOLICY_REPLICA_SOURCE_INFO; 250 251 typedef struct _POLICY_DEFAULT_QUOTA_INFO { 252 QUOTA_LIMITS QuotaLimits; 253 } POLICY_DEFAULT_QUOTA_INFO,*PPOLICY_DEFAULT_QUOTA_INFO; 254 255 typedef struct _POLICY_MODIFICATION_INFO { 256 LARGE_INTEGER ModifiedId; 257 LARGE_INTEGER DatabaseCreationTime; 258 } POLICY_MODIFICATION_INFO,*PPOLICY_MODIFICATION_INFO; 259 260 typedef struct _POLICY_AUDIT_FULL_SET_INFO { 261 BOOLEAN ShutDownOnFull; 262 } POLICY_AUDIT_FULL_SET_INFO,*PPOLICY_AUDIT_FULL_SET_INFO; 263 264 typedef struct _POLICY_AUDIT_FULL_QUERY_INFO { 265 BOOLEAN ShutDownOnFull; 266 BOOLEAN LogIsFull; 267 } POLICY_AUDIT_FULL_QUERY_INFO,*PPOLICY_AUDIT_FULL_QUERY_INFO; 268 269 typedef enum _POLICY_DOMAIN_INFORMATION_CLASS { 270 PolicyDomainEfsInformation = 2,PolicyDomainKerberosTicketInformation 271 } POLICY_DOMAIN_INFORMATION_CLASS,*PPOLICY_DOMAIN_INFORMATION_CLASS; 272 273 typedef struct _POLICY_DOMAIN_EFS_INFO { 274 ULONG InfoLength; 275 PUCHAR EfsBlob; 276 } POLICY_DOMAIN_EFS_INFO,*PPOLICY_DOMAIN_EFS_INFO; 277 278#define POLICY_KERBEROS_VALIDATE_CLIENT 0x00000080 279 280 typedef struct _POLICY_DOMAIN_KERBEROS_TICKET_INFO { 281 ULONG AuthenticationOptions; 282 LARGE_INTEGER MaxServiceTicketAge; 283 LARGE_INTEGER MaxTicketAge; 284 LARGE_INTEGER MaxRenewAge; 285 LARGE_INTEGER MaxClockSkew; 286 LARGE_INTEGER Reserved; 287 } POLICY_DOMAIN_KERBEROS_TICKET_INFO,*PPOLICY_DOMAIN_KERBEROS_TICKET_INFO; 288 289 typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS { 290 PolicyNotifyAuditEventsInformation = 1,PolicyNotifyAccountDomainInformation,PolicyNotifyServerRoleInformation,PolicyNotifyDnsDomainInformation, 291 PolicyNotifyDomainEfsInformation,PolicyNotifyDomainKerberosTicketInformation,PolicyNotifyMachineAccountPasswordInformation 292 } POLICY_NOTIFICATION_INFORMATION_CLASS,*PPOLICY_NOTIFICATION_INFORMATION_CLASS; 293 294 typedef PVOID LSA_HANDLE,*PLSA_HANDLE; 295 296 typedef enum _TRUSTED_INFORMATION_CLASS { 297 TrustedDomainNameInformation = 1,TrustedControllersInformation,TrustedPosixOffsetInformation,TrustedPasswordInformation, 298 TrustedDomainInformationBasic,TrustedDomainInformationEx,TrustedDomainAuthInformation,TrustedDomainFullInformation, 299 TrustedDomainAuthInformationInternal,TrustedDomainFullInformationInternal,TrustedDomainInformationEx2Internal,TrustedDomainFullInformation2Internal 300 } TRUSTED_INFORMATION_CLASS,*PTRUSTED_INFORMATION_CLASS; 301 302 typedef struct _TRUSTED_DOMAIN_NAME_INFO { 303 LSA_UNICODE_STRING Name; 304 } TRUSTED_DOMAIN_NAME_INFO,*PTRUSTED_DOMAIN_NAME_INFO; 305 306 typedef struct _TRUSTED_CONTROLLERS_INFO { 307 ULONG Entries; 308 PLSA_UNICODE_STRING Names; 309 } TRUSTED_CONTROLLERS_INFO,*PTRUSTED_CONTROLLERS_INFO; 310 311 typedef struct _TRUSTED_POSIX_OFFSET_INFO { 312 ULONG Offset; 313 } TRUSTED_POSIX_OFFSET_INFO,*PTRUSTED_POSIX_OFFSET_INFO; 314 315 typedef struct _TRUSTED_PASSWORD_INFO { 316 LSA_UNICODE_STRING Password; 317 LSA_UNICODE_STRING OldPassword; 318 } TRUSTED_PASSWORD_INFO,*PTRUSTED_PASSWORD_INFO; 319 320 typedef LSA_TRUST_INFORMATION TRUSTED_DOMAIN_INFORMATION_BASIC; 321 typedef PLSA_TRUST_INFORMATION PTRUSTED_DOMAIN_INFORMATION_BASIC; 322 323#define TRUST_DIRECTION_DISABLED 0x00000000 324#define TRUST_DIRECTION_INBOUND 0x00000001 325#define TRUST_DIRECTION_OUTBOUND 0x00000002 326#define TRUST_DIRECTION_BIDIRECTIONAL (TRUST_DIRECTION_INBOUND | TRUST_DIRECTION_OUTBOUND) 327 328#define TRUST_TYPE_DOWNLEVEL 0x00000001 329#define TRUST_TYPE_UPLEVEL 0x00000002 330#define TRUST_TYPE_MIT 0x00000003 331 332#define TRUST_ATTRIBUTE_NON_TRANSITIVE 0x00000001 333#define TRUST_ATTRIBUTE_UPLEVEL_ONLY 0x00000002 334#define TRUST_ATTRIBUTE_QUARANTINED_DOMAIN 0x00000004 335#define TRUST_ATTRIBUTE_FOREST_TRANSITIVE 0x00000008 336#define TRUST_ATTRIBUTE_CROSS_ORGANIZATION 0x00000010 337#define TRUST_ATTRIBUTE_WITHIN_FOREST 0x00000020 338#define TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL 0x00000040 339#define TRUST_ATTRIBUTE_TRUST_USES_RC4_ENCRYPTION 0x00000080 340 341#define TRUST_ATTRIBUTES_VALID 0xFF03FFFF 342#define TRUST_ATTRIBUTES_USER 0xFF000000 343 344 typedef struct _TRUSTED_DOMAIN_INFORMATION_EX { 345 LSA_UNICODE_STRING Name; 346 LSA_UNICODE_STRING FlatName; 347 PSID Sid; 348 ULONG TrustDirection; 349 ULONG TrustType; 350 ULONG TrustAttributes; 351 } TRUSTED_DOMAIN_INFORMATION_EX,*PTRUSTED_DOMAIN_INFORMATION_EX; 352 353 typedef struct _TRUSTED_DOMAIN_INFORMATION_EX2 { 354 LSA_UNICODE_STRING Name; 355 LSA_UNICODE_STRING FlatName; 356 PSID Sid; 357 ULONG TrustDirection; 358 ULONG TrustType; 359 ULONG TrustAttributes; 360 ULONG ForestTrustLength; 361 PUCHAR ForestTrustInfo; 362 } TRUSTED_DOMAIN_INFORMATION_EX2,*PTRUSTED_DOMAIN_INFORMATION_EX2; 363 364#define TRUST_AUTH_TYPE_NONE 0 365#define TRUST_AUTH_TYPE_NT4OWF 1 366#define TRUST_AUTH_TYPE_CLEAR 2 367#define TRUST_AUTH_TYPE_VERSION 3 368 369 typedef struct _LSA_AUTH_INFORMATION { 370 LARGE_INTEGER LastUpdateTime; 371 ULONG AuthType; 372 ULONG AuthInfoLength; 373 PUCHAR AuthInfo; 374 } LSA_AUTH_INFORMATION,*PLSA_AUTH_INFORMATION; 375 376 typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION { 377 ULONG IncomingAuthInfos; 378 PLSA_AUTH_INFORMATION IncomingAuthenticationInformation; 379 PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation; 380 ULONG OutgoingAuthInfos; 381 PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation; 382 PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation; 383 } TRUSTED_DOMAIN_AUTH_INFORMATION,*PTRUSTED_DOMAIN_AUTH_INFORMATION; 384 385 typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION { 386 TRUSTED_DOMAIN_INFORMATION_EX Information; 387 TRUSTED_POSIX_OFFSET_INFO PosixOffset; 388 TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation; 389 } TRUSTED_DOMAIN_FULL_INFORMATION,*PTRUSTED_DOMAIN_FULL_INFORMATION; 390 391 typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION2 { 392 TRUSTED_DOMAIN_INFORMATION_EX2 Information; 393 TRUSTED_POSIX_OFFSET_INFO PosixOffset; 394 TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation; 395 } TRUSTED_DOMAIN_FULL_INFORMATION2,*PTRUSTED_DOMAIN_FULL_INFORMATION2; 396 397 typedef enum { 398 ForestTrustTopLevelName,ForestTrustTopLevelNameEx,ForestTrustDomainInfo,ForestTrustRecordTypeLast = ForestTrustDomainInfo 399 } LSA_FOREST_TRUST_RECORD_TYPE; 400 401#define LSA_FTRECORD_DISABLED_REASONS (__MSABI_LONG(0x0000FFFF)) 402 403#define LSA_TLN_DISABLED_NEW (__MSABI_LONG(0x00000001)) 404#define LSA_TLN_DISABLED_ADMIN (__MSABI_LONG(0x00000002)) 405#define LSA_TLN_DISABLED_CONFLICT (__MSABI_LONG(0x00000004)) 406 407#define LSA_SID_DISABLED_ADMIN (__MSABI_LONG(0x00000001)) 408#define LSA_SID_DISABLED_CONFLICT (__MSABI_LONG(0x00000002)) 409#define LSA_NB_DISABLED_ADMIN (__MSABI_LONG(0x00000004)) 410#define LSA_NB_DISABLED_CONFLICT (__MSABI_LONG(0x00000008)) 411 412 typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO { 413 PSID Sid; 414 LSA_UNICODE_STRING DnsName; 415 LSA_UNICODE_STRING NetbiosName; 416 } LSA_FOREST_TRUST_DOMAIN_INFO,*PLSA_FOREST_TRUST_DOMAIN_INFO; 417 418#define MAX_FOREST_TRUST_BINARY_DATA_SIZE (128*1024) 419 420 typedef struct _LSA_FOREST_TRUST_BINARY_DATA { 421 ULONG Length; 422 PUCHAR Buffer; 423 } LSA_FOREST_TRUST_BINARY_DATA,*PLSA_FOREST_TRUST_BINARY_DATA; 424 425 typedef struct _LSA_FOREST_TRUST_RECORD { 426 ULONG Flags; 427 LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType; 428 LARGE_INTEGER Time; 429 union { 430 LSA_UNICODE_STRING TopLevelName; 431 LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo; 432 LSA_FOREST_TRUST_BINARY_DATA Data; 433 } ForestTrustData; 434 } LSA_FOREST_TRUST_RECORD,*PLSA_FOREST_TRUST_RECORD; 435 436#define MAX_RECORDS_IN_FOREST_TRUST_INFO 4000 437 438 typedef struct _LSA_FOREST_TRUST_INFORMATION { 439 ULONG RecordCount; 440 PLSA_FOREST_TRUST_RECORD *Entries; 441 } LSA_FOREST_TRUST_INFORMATION,*PLSA_FOREST_TRUST_INFORMATION; 442 443 typedef enum { 444 CollisionTdo,CollisionXref,CollisionOther 445 } LSA_FOREST_TRUST_COLLISION_RECORD_TYPE; 446 447 typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD { 448 ULONG Index; 449 LSA_FOREST_TRUST_COLLISION_RECORD_TYPE Type; 450 ULONG Flags; 451 LSA_UNICODE_STRING Name; 452 } LSA_FOREST_TRUST_COLLISION_RECORD,*PLSA_FOREST_TRUST_COLLISION_RECORD; 453 454 typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION { 455 ULONG RecordCount; 456 PLSA_FOREST_TRUST_COLLISION_RECORD *Entries; 457 } LSA_FOREST_TRUST_COLLISION_INFORMATION,*PLSA_FOREST_TRUST_COLLISION_INFORMATION; 458 459 typedef ULONG LSA_ENUMERATION_HANDLE,*PLSA_ENUMERATION_HANDLE; 460 461 typedef struct _LSA_ENUMERATION_INFORMATION { 462 PSID Sid; 463 } LSA_ENUMERATION_INFORMATION,*PLSA_ENUMERATION_INFORMATION; 464 465 NTSTATUS NTAPI LsaFreeMemory(PVOID Buffer); 466 NTSTATUS NTAPI LsaClose(LSA_HANDLE ObjectHandle); 467 468 typedef struct _SECURITY_LOGON_SESSION_DATA { 469 ULONG Size; 470 LUID LogonId; 471 LSA_UNICODE_STRING UserName; 472 LSA_UNICODE_STRING LogonDomain; 473 LSA_UNICODE_STRING AuthenticationPackage; 474 ULONG LogonType; 475 ULONG Session; 476 PSID Sid; 477 LARGE_INTEGER LogonTime; 478 LSA_UNICODE_STRING LogonServer; 479 LSA_UNICODE_STRING DnsDomainName; 480 LSA_UNICODE_STRING Upn; 481 } SECURITY_LOGON_SESSION_DATA,*PSECURITY_LOGON_SESSION_DATA; 482 483 NTSTATUS NTAPI LsaEnumerateLogonSessions(PULONG LogonSessionCount,PLUID *LogonSessionList); 484 NTSTATUS NTAPI LsaGetLogonSessionData(PLUID LogonId,PSECURITY_LOGON_SESSION_DATA *ppLogonSessionData); 485 NTSTATUS NTAPI LsaOpenPolicy(PLSA_UNICODE_STRING SystemName,PLSA_OBJECT_ATTRIBUTES ObjectAttributes,ACCESS_MASK DesiredAccess,PLSA_HANDLE PolicyHandle); 486 NTSTATUS NTAPI LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_INFORMATION_CLASS InformationClass,PVOID *Buffer); 487 NTSTATUS NTAPI LsaSetInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_INFORMATION_CLASS InformationClass,PVOID Buffer); 488 NTSTATUS NTAPI LsaQueryDomainInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_DOMAIN_INFORMATION_CLASS InformationClass,PVOID *Buffer); 489 NTSTATUS NTAPI LsaSetDomainInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_DOMAIN_INFORMATION_CLASS InformationClass,PVOID Buffer); 490 NTSTATUS NTAPI LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass,HANDLE NotificationEventHandle); 491 NTSTATUS NTAPI LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass,HANDLE NotificationEventHandle); 492 NTSTATUS NTAPI LsaEnumerateTrustedDomains(LSA_HANDLE PolicyHandle,PLSA_ENUMERATION_HANDLE EnumerationContext,PVOID *Buffer,ULONG PreferedMaximumLength,PULONG CountReturned); 493 NTSTATUS NTAPI LsaLookupNames(LSA_HANDLE PolicyHandle,ULONG Count,PLSA_UNICODE_STRING Names,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_SID *Sids); 494 NTSTATUS NTAPI LsaLookupNames2(LSA_HANDLE PolicyHandle,ULONG Flags,ULONG Count,PLSA_UNICODE_STRING Names,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_SID2 *Sids); 495 NTSTATUS NTAPI LsaLookupSids(LSA_HANDLE PolicyHandle,ULONG Count,PSID *Sids,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_NAME *Names); 496 497#define SE_INTERACTIVE_LOGON_NAME TEXT("SeInteractiveLogonRight") 498#define SE_NETWORK_LOGON_NAME TEXT("SeNetworkLogonRight") 499#define SE_BATCH_LOGON_NAME TEXT("SeBatchLogonRight") 500#define SE_SERVICE_LOGON_NAME TEXT("SeServiceLogonRight") 501#define SE_DENY_INTERACTIVE_LOGON_NAME TEXT("SeDenyInteractiveLogonRight") 502#define SE_DENY_NETWORK_LOGON_NAME TEXT("SeDenyNetworkLogonRight") 503#define SE_DENY_BATCH_LOGON_NAME TEXT("SeDenyBatchLogonRight") 504#define SE_DENY_SERVICE_LOGON_NAME TEXT("SeDenyServiceLogonRight") 505#define SE_REMOTE_INTERACTIVE_LOGON_NAME TEXT("SeRemoteInteractiveLogonRight") 506#define SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME TEXT("SeDenyRemoteInteractiveLogonRight") 507 508 NTSTATUS NTAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING UserRight,PVOID *Buffer,PULONG CountReturned); 509 NTSTATUS NTAPI LsaEnumerateAccountRights(LSA_HANDLE PolicyHandle,PSID AccountSid,PLSA_UNICODE_STRING *UserRights,PULONG CountOfRights); 510 NTSTATUS NTAPI LsaAddAccountRights(LSA_HANDLE PolicyHandle,PSID AccountSid,PLSA_UNICODE_STRING UserRights,ULONG CountOfRights); 511 NTSTATUS NTAPI LsaRemoveAccountRights(LSA_HANDLE PolicyHandle,PSID AccountSid,BOOLEAN AllRights,PLSA_UNICODE_STRING UserRights,ULONG CountOfRights); 512 NTSTATUS NTAPI LsaOpenTrustedDomainByName(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,ACCESS_MASK DesiredAccess,PLSA_HANDLE TrustedDomainHandle); 513 NTSTATUS NTAPI LsaQueryTrustedDomainInfo(LSA_HANDLE PolicyHandle,PSID TrustedDomainSid,TRUSTED_INFORMATION_CLASS InformationClass,PVOID *Buffer); 514 NTSTATUS NTAPI LsaSetTrustedDomainInformation(LSA_HANDLE PolicyHandle,PSID TrustedDomainSid,TRUSTED_INFORMATION_CLASS InformationClass,PVOID Buffer); 515 NTSTATUS NTAPI LsaDeleteTrustedDomain(LSA_HANDLE PolicyHandle,PSID TrustedDomainSid); 516 NTSTATUS NTAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,TRUSTED_INFORMATION_CLASS InformationClass,PVOID *Buffer); 517 NTSTATUS NTAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,TRUSTED_INFORMATION_CLASS InformationClass,PVOID Buffer); 518 NTSTATUS NTAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE PolicyHandle,PLSA_ENUMERATION_HANDLE EnumerationContext,PVOID *Buffer,ULONG PreferedMaximumLength,PULONG CountReturned); 519 NTSTATUS NTAPI LsaCreateTrustedDomainEx(LSA_HANDLE PolicyHandle,PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation,ACCESS_MASK DesiredAccess,PLSA_HANDLE TrustedDomainHandle); 520 NTSTATUS NTAPI LsaQueryForestTrustInformation(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo); 521 NTSTATUS NTAPI LsaSetForestTrustInformation(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo,BOOLEAN CheckOnly,PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo); 522 523#ifdef TESTING_MATCHING_ROUTINE 524 NTSTATUS NTAPI LsaForestTrustFindMatch(LSA_HANDLE PolicyHandle,ULONG Type,PLSA_UNICODE_STRING Name,PLSA_UNICODE_STRING *Match); 525#endif 526 527 NTSTATUS NTAPI LsaStorePrivateData(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING KeyName,PLSA_UNICODE_STRING PrivateData); 528 NTSTATUS NTAPI LsaRetrievePrivateData(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING KeyName,PLSA_UNICODE_STRING *PrivateData); 529 ULONG NTAPI LsaNtStatusToWinError(NTSTATUS Status); 530 531#ifndef _NTLSA_IFS_ 532#define _NTLSA_IFS_ 533#endif 534 535 enum NEGOTIATE_MESSAGES { 536 NegEnumPackagePrefixes = 0,NegGetCallerName = 1,NegCallPackageMax 537 }; 538 539#define NEGOTIATE_MAX_PREFIX 32 540 541 typedef struct _NEGOTIATE_PACKAGE_PREFIX { 542 ULONG_PTR PackageId; 543 PVOID PackageDataA; 544 PVOID PackageDataW; 545 ULONG_PTR PrefixLen; 546 UCHAR Prefix[NEGOTIATE_MAX_PREFIX ]; 547 } NEGOTIATE_PACKAGE_PREFIX,*PNEGOTIATE_PACKAGE_PREFIX; 548 549 typedef struct _NEGOTIATE_PACKAGE_PREFIXES { 550 ULONG MessageType; 551 ULONG PrefixCount; 552 ULONG Offset; 553 ULONG Pad; 554 } NEGOTIATE_PACKAGE_PREFIXES,*PNEGOTIATE_PACKAGE_PREFIXES; 555 556 typedef struct _NEGOTIATE_CALLER_NAME_REQUEST { 557 ULONG MessageType; 558 LUID LogonId; 559 } NEGOTIATE_CALLER_NAME_REQUEST,*PNEGOTIATE_CALLER_NAME_REQUEST; 560 561 typedef struct _NEGOTIATE_CALLER_NAME_RESPONSE { 562 ULONG MessageType; 563 PWSTR CallerName; 564 } NEGOTIATE_CALLER_NAME_RESPONSE,*PNEGOTIATE_CALLER_NAME_RESPONSE; 565 566#ifndef _NTDEF_ 567#ifndef __UNICODE_STRING_DEFINED 568#define __UNICODE_STRING_DEFINED 569 typedef LSA_UNICODE_STRING UNICODE_STRING,*PUNICODE_STRING; 570#endif 571#ifndef __STRING_DEFINED 572#define __STRING_DEFINED 573 typedef LSA_STRING STRING,*PSTRING; 574#endif 575#endif 576 577#ifndef _DOMAIN_PASSWORD_INFORMATION_DEFINED 578#define _DOMAIN_PASSWORD_INFORMATION_DEFINED 579 typedef struct _DOMAIN_PASSWORD_INFORMATION { 580 USHORT MinPasswordLength; 581 USHORT PasswordHistoryLength; 582 ULONG PasswordProperties; 583 LARGE_INTEGER MaxPasswordAge; 584 LARGE_INTEGER MinPasswordAge; 585 } DOMAIN_PASSWORD_INFORMATION,*PDOMAIN_PASSWORD_INFORMATION; 586#endif 587 588#define DOMAIN_PASSWORD_COMPLEX __MSABI_LONG(0x00000001) 589#define DOMAIN_PASSWORD_NO_ANON_CHANGE __MSABI_LONG(0x00000002) 590#define DOMAIN_PASSWORD_NO_CLEAR_CHANGE __MSABI_LONG(0x00000004) 591#define DOMAIN_LOCKOUT_ADMINS __MSABI_LONG(0x00000008) 592#define DOMAIN_PASSWORD_STORE_CLEARTEXT __MSABI_LONG(0x00000010) 593#define DOMAIN_REFUSE_PASSWORD_CHANGE __MSABI_LONG(0x00000020) 594 595#ifndef _PASSWORD_NOTIFICATION_DEFINED 596#define _PASSWORD_NOTIFICATION_DEFINED 597 typedef NTSTATUS (*PSAM_PASSWORD_NOTIFICATION_ROUTINE)(PUNICODE_STRING UserName,ULONG RelativeId,PUNICODE_STRING NewPassword); 598 599#define SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE "PasswordChangeNotify" 600 601 typedef BOOLEAN (*PSAM_INIT_NOTIFICATION_ROUTINE)(); 602 603#define SAM_INIT_NOTIFICATION_ROUTINE "InitializeChangeNotify" 604#define SAM_PASSWORD_FILTER_ROUTINE "PasswordFilter" 605 606 typedef BOOLEAN (*PSAM_PASSWORD_FILTER_ROUTINE)(PUNICODE_STRING AccountName,PUNICODE_STRING FullName,PUNICODE_STRING Password,BOOLEAN SetOperation); 607#endif 608 609#define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" 610#define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" 611#define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR) 612 613#define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0" 614#define MSV1_0_SUBAUTHENTICATION_VALUE "Auth" 615 616 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE { 617 MsV1_0InteractiveLogon = 2,MsV1_0Lm20Logon,MsV1_0NetworkLogon,MsV1_0SubAuthLogon,MsV1_0WorkstationUnlockLogon = 7 618 } MSV1_0_LOGON_SUBMIT_TYPE,*PMSV1_0_LOGON_SUBMIT_TYPE; 619 620 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE { 621 MsV1_0InteractiveProfile = 2,MsV1_0Lm20LogonProfile,MsV1_0SmartCardProfile 622 } MSV1_0_PROFILE_BUFFER_TYPE,*PMSV1_0_PROFILE_BUFFER_TYPE; 623 624 typedef struct _MSV1_0_INTERACTIVE_LOGON { 625 MSV1_0_LOGON_SUBMIT_TYPE MessageType; 626 UNICODE_STRING LogonDomainName; 627 UNICODE_STRING UserName; 628 UNICODE_STRING Password; 629 } MSV1_0_INTERACTIVE_LOGON,*PMSV1_0_INTERACTIVE_LOGON; 630 631 typedef struct _MSV1_0_INTERACTIVE_PROFILE { 632 MSV1_0_PROFILE_BUFFER_TYPE MessageType; 633 USHORT LogonCount; 634 USHORT BadPasswordCount; 635 LARGE_INTEGER LogonTime; 636 LARGE_INTEGER LogoffTime; 637 LARGE_INTEGER KickOffTime; 638 LARGE_INTEGER PasswordLastSet; 639 LARGE_INTEGER PasswordCanChange; 640 LARGE_INTEGER PasswordMustChange; 641 UNICODE_STRING LogonScript; 642 UNICODE_STRING HomeDirectory; 643 UNICODE_STRING FullName; 644 UNICODE_STRING ProfilePath; 645 UNICODE_STRING HomeDirectoryDrive; 646 UNICODE_STRING LogonServer; 647 ULONG UserFlags; 648 } MSV1_0_INTERACTIVE_PROFILE,*PMSV1_0_INTERACTIVE_PROFILE; 649 650#define MSV1_0_CHALLENGE_LENGTH 8 651#define MSV1_0_USER_SESSION_KEY_LENGTH 16 652#define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8 653 654#define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02 655#define MSV1_0_UPDATE_LOGON_STATISTICS 0x04 656#define MSV1_0_RETURN_USER_PARAMETERS 0x08 657#define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10 658#define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20 659#define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40 660 661#define MSV1_0_USE_CLIENT_CHALLENGE 0x80 662#define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100 663#define MSV1_0_RETURN_PROFILE_PATH 0x200 664#define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400 665#define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800 666#define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000 667#define MSV1_0_ALLOW_FORCE_GUEST 0x00002000 668#define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000 669#define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000 670#define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000 671#define MSV1_0_ALLOW_MSVCHAPV2 0x00010000 672 673#define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000 674#define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24 675#define MSV1_0_MNS_LOGON 0x01000000 676 677#define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2 678#define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132 679 680 typedef struct _MSV1_0_LM20_LOGON { 681 MSV1_0_LOGON_SUBMIT_TYPE MessageType; 682 UNICODE_STRING LogonDomainName; 683 UNICODE_STRING UserName; 684 UNICODE_STRING Workstation; 685 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; 686 STRING CaseSensitiveChallengeResponse; 687 STRING CaseInsensitiveChallengeResponse; 688 ULONG ParameterControl; 689 } MSV1_0_LM20_LOGON,*PMSV1_0_LM20_LOGON; 690 691 typedef struct _MSV1_0_SUBAUTH_LOGON{ 692 MSV1_0_LOGON_SUBMIT_TYPE MessageType; 693 UNICODE_STRING LogonDomainName; 694 UNICODE_STRING UserName; 695 UNICODE_STRING Workstation; 696 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; 697 STRING AuthenticationInfo1; 698 STRING AuthenticationInfo2; 699 ULONG ParameterControl; 700 ULONG SubAuthPackageId; 701 } MSV1_0_SUBAUTH_LOGON,*PMSV1_0_SUBAUTH_LOGON; 702 703#define LOGON_GUEST 0x01 704#define LOGON_NOENCRYPTION 0x02 705#define LOGON_CACHED_ACCOUNT 0x04 706#define LOGON_USED_LM_PASSWORD 0x08 707#define LOGON_EXTRA_SIDS 0x20 708#define LOGON_SUBAUTH_SESSION_KEY 0x40 709#define LOGON_SERVER_TRUST_ACCOUNT 0x80 710#define LOGON_NTLMV2_ENABLED 0x100 711#define LOGON_RESOURCE_GROUPS 0x200 712#define LOGON_PROFILE_PATH_RETURNED 0x400 713 714#define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000 715 716#define LOGON_GRACE_LOGON 0x01000000 717 718 typedef struct _MSV1_0_LM20_LOGON_PROFILE { 719 MSV1_0_PROFILE_BUFFER_TYPE MessageType; 720 LARGE_INTEGER KickOffTime; 721 LARGE_INTEGER LogoffTime; 722 ULONG UserFlags; 723 UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH]; 724 UNICODE_STRING LogonDomainName; 725 UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH]; 726 UNICODE_STRING LogonServer; 727 UNICODE_STRING UserParameters; 728 } MSV1_0_LM20_LOGON_PROFILE,*PMSV1_0_LM20_LOGON_PROFILE; 729 730#define MSV1_0_OWF_PASSWORD_LENGTH 16 731#define MSV1_0_CRED_LM_PRESENT 0x1 732#define MSV1_0_CRED_NT_PRESENT 0x2 733#define MSV1_0_CRED_VERSION 0 734 735 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL { 736 ULONG Version; 737 ULONG Flags; 738 UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH]; 739 UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH]; 740 } MSV1_0_SUPPLEMENTAL_CREDENTIAL,*PMSV1_0_SUPPLEMENTAL_CREDENTIAL; 741 742#define MSV1_0_NTLM3_RESPONSE_LENGTH 16 743#define MSV1_0_NTLM3_OWF_LENGTH 16 744 745#define MSV1_0_MAX_NTLM3_LIFE 129600 746#define MSV1_0_MAX_AVL_SIZE 64000 747 748#define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001 749 750 typedef struct _MSV1_0_NTLM3_RESPONSE { 751 UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH]; 752 UCHAR RespType; 753 UCHAR HiRespType; 754 USHORT Flags; 755 ULONG MsgWord; 756 ULONGLONG TimeStamp; 757 UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH]; 758 ULONG AvPairsOff; 759 UCHAR Buffer[1]; 760 } MSV1_0_NTLM3_RESPONSE,*PMSV1_0_NTLM3_RESPONSE; 761 762#define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH) 763#define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE,AvPairsOff) 764 765 typedef enum { 766 MsvAvEOL,MsvAvNbComputerName,MsvAvNbDomainName,MsvAvDnsComputerName,MsvAvDnsDomainName,MsvAvDnsTreeName,MsvAvFlags 767 } MSV1_0_AVID; 768 769 typedef struct _MSV1_0_AV_PAIR { 770 USHORT AvId; 771 USHORT AvLen; 772 773 } MSV1_0_AV_PAIR,*PMSV1_0_AV_PAIR; 774 775 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE { 776 MsV1_0Lm20ChallengeRequest = 0,MsV1_0Lm20GetChallengeResponse,MsV1_0EnumerateUsers,MsV1_0GetUserInfo,MsV1_0ReLogonUsers,MsV1_0ChangePassword, 777 MsV1_0ChangeCachedPassword,MsV1_0GenericPassthrough,MsV1_0CacheLogon,MsV1_0SubAuth,MsV1_0DeriveCredential,MsV1_0CacheLookup, 778 MsV1_0SetProcessOption 779 } MSV1_0_PROTOCOL_MESSAGE_TYPE,*PMSV1_0_PROTOCOL_MESSAGE_TYPE; 780 781 typedef struct _MSV1_0_CHANGEPASSWORD_REQUEST { 782 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 783 UNICODE_STRING DomainName; 784 UNICODE_STRING AccountName; 785 UNICODE_STRING OldPassword; 786 UNICODE_STRING NewPassword; 787 BOOLEAN Impersonating; 788 } MSV1_0_CHANGEPASSWORD_REQUEST,*PMSV1_0_CHANGEPASSWORD_REQUEST; 789 790 typedef struct _MSV1_0_CHANGEPASSWORD_RESPONSE { 791 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 792 BOOLEAN PasswordInfoValid; 793 DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo; 794 } MSV1_0_CHANGEPASSWORD_RESPONSE,*PMSV1_0_CHANGEPASSWORD_RESPONSE; 795 796 typedef struct _MSV1_0_PASSTHROUGH_REQUEST { 797 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 798 UNICODE_STRING DomainName; 799 UNICODE_STRING PackageName; 800 ULONG DataLength; 801 PUCHAR LogonData; 802 ULONG Pad; 803 } MSV1_0_PASSTHROUGH_REQUEST,*PMSV1_0_PASSTHROUGH_REQUEST; 804 805 typedef struct _MSV1_0_PASSTHROUGH_RESPONSE { 806 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 807 ULONG Pad; 808 ULONG DataLength; 809 PUCHAR ValidationData; 810 } MSV1_0_PASSTHROUGH_RESPONSE,*PMSV1_0_PASSTHROUGH_RESPONSE; 811 812 typedef struct _MSV1_0_SUBAUTH_REQUEST{ 813 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 814 ULONG SubAuthPackageId; 815 ULONG SubAuthInfoLength; 816 PUCHAR SubAuthSubmitBuffer; 817 } MSV1_0_SUBAUTH_REQUEST,*PMSV1_0_SUBAUTH_REQUEST; 818 819 typedef struct _MSV1_0_SUBAUTH_RESPONSE{ 820 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 821 ULONG SubAuthInfoLength; 822 PUCHAR SubAuthReturnBuffer; 823 } MSV1_0_SUBAUTH_RESPONSE,*PMSV1_0_SUBAUTH_RESPONSE; 824 825#define RtlGenRandom SystemFunction036 826#define RtlEncryptMemory SystemFunction040 827#define RtlDecryptMemory SystemFunction041 828 829 BOOLEAN RtlGenRandom(PVOID RandomBuffer,ULONG RandomBufferLength); 830 831#define RTL_ENCRYPT_MEMORY_SIZE 8 832#define RTL_ENCRYPT_OPTION_CROSS_PROCESS 0x01 833#define RTL_ENCRYPT_OPTION_SAME_LOGON 0x02 834 835 NTSTATUS RtlEncryptMemory(PVOID Memory,ULONG MemorySize,ULONG OptionFlags); 836 NTSTATUS RtlDecryptMemory(PVOID Memory,ULONG MemorySize,ULONG OptionFlags); 837 838#define KERBEROS_VERSION 5 839#define KERBEROS_REVISION 6 840 841#define KERB_ETYPE_NULL 0 842#define KERB_ETYPE_DES_CBC_CRC 1 843#define KERB_ETYPE_DES_CBC_MD4 2 844#define KERB_ETYPE_DES_CBC_MD5 3 845 846#define KERB_ETYPE_RC4_MD4 -128 847#define KERB_ETYPE_RC4_PLAIN2 -129 848#define KERB_ETYPE_RC4_LM -130 849#define KERB_ETYPE_RC4_SHA -131 850#define KERB_ETYPE_DES_PLAIN -132 851#define KERB_ETYPE_RC4_HMAC_OLD -133 852#define KERB_ETYPE_RC4_PLAIN_OLD -134 853#define KERB_ETYPE_RC4_HMAC_OLD_EXP -135 854#define KERB_ETYPE_RC4_PLAIN_OLD_EXP -136 855#define KERB_ETYPE_RC4_PLAIN -140 856#define KERB_ETYPE_RC4_PLAIN_EXP -141 857 858#define KERB_ETYPE_DSA_SHA1_CMS 9 859#define KERB_ETYPE_RSA_MD5_CMS 10 860#define KERB_ETYPE_RSA_SHA1_CMS 11 861#define KERB_ETYPE_RC2_CBC_ENV 12 862#define KERB_ETYPE_RSA_ENV 13 863#define KERB_ETYPE_RSA_ES_OEAP_ENV 14 864#define KERB_ETYPE_DES_EDE3_CBC_ENV 15 865 866#define KERB_ETYPE_DSA_SIGN 8 867#define KERB_ETYPE_RSA_PRIV 9 868#define KERB_ETYPE_RSA_PUB 10 869#define KERB_ETYPE_RSA_PUB_MD5 11 870#define KERB_ETYPE_RSA_PUB_SHA1 12 871#define KERB_ETYPE_PKCS7_PUB 13 872 873#define KERB_ETYPE_DES3_CBC_MD5 5 874#define KERB_ETYPE_DES3_CBC_SHA1 7 875#define KERB_ETYPE_DES3_CBC_SHA1_KD 16 876 877#define KERB_ETYPE_DES_CBC_MD5_NT 20 878#define KERB_ETYPE_RC4_HMAC_NT 23 879#define KERB_ETYPE_RC4_HMAC_NT_EXP 24 880 881#define KERB_CHECKSUM_NONE 0 882#define KERB_CHECKSUM_CRC32 1 883#define KERB_CHECKSUM_MD4 2 884#define KERB_CHECKSUM_KRB_DES_MAC 4 885#define KERB_CHECKSUM_KRB_DES_MAC_K 5 886#define KERB_CHECKSUM_MD5 7 887#define KERB_CHECKSUM_MD5_DES 8 888 889#define KERB_CHECKSUM_LM -130 890#define KERB_CHECKSUM_SHA1 -131 891#define KERB_CHECKSUM_REAL_CRC32 -132 892#define KERB_CHECKSUM_DES_MAC -133 893#define KERB_CHECKSUM_DES_MAC_MD5 -134 894#define KERB_CHECKSUM_MD25 -135 895#define KERB_CHECKSUM_RC4_MD5 -136 896#define KERB_CHECKSUM_MD5_HMAC -137 897#define KERB_CHECKSUM_HMAC_MD5 -138 898 899#define AUTH_REQ_ALLOW_FORWARDABLE 0x00000001 900#define AUTH_REQ_ALLOW_PROXIABLE 0x00000002 901#define AUTH_REQ_ALLOW_POSTDATE 0x00000004 902#define AUTH_REQ_ALLOW_RENEWABLE 0x00000008 903#define AUTH_REQ_ALLOW_NOADDRESS 0x00000010 904#define AUTH_REQ_ALLOW_ENC_TKT_IN_SKEY 0x00000020 905#define AUTH_REQ_ALLOW_VALIDATE 0x00000040 906#define AUTH_REQ_VALIDATE_CLIENT 0x00000080 907#define AUTH_REQ_OK_AS_DELEGATE 0x00000100 908#define AUTH_REQ_PREAUTH_REQUIRED 0x00000200 909#define AUTH_REQ_TRANSITIVE_TRUST 0x00000400 910#define AUTH_REQ_ALLOW_S4U_DELEGATE 0x00000800 911 912#define AUTH_REQ_PER_USER_FLAGS (AUTH_REQ_ALLOW_FORWARDABLE | AUTH_REQ_ALLOW_PROXIABLE | AUTH_REQ_ALLOW_POSTDATE | AUTH_REQ_ALLOW_RENEWABLE | AUTH_REQ_ALLOW_VALIDATE) 913 914#define KERB_TICKET_FLAGS_reserved 0x80000000 915#define KERB_TICKET_FLAGS_forwardable 0x40000000 916#define KERB_TICKET_FLAGS_forwarded 0x20000000 917#define KERB_TICKET_FLAGS_proxiable 0x10000000 918#define KERB_TICKET_FLAGS_proxy 0x08000000 919#define KERB_TICKET_FLAGS_may_postdate 0x04000000 920#define KERB_TICKET_FLAGS_postdated 0x02000000 921#define KERB_TICKET_FLAGS_invalid 0x01000000 922#define KERB_TICKET_FLAGS_renewable 0x00800000 923#define KERB_TICKET_FLAGS_initial 0x00400000 924#define KERB_TICKET_FLAGS_pre_authent 0x00200000 925#define KERB_TICKET_FLAGS_hw_authent 0x00100000 926#define KERB_TICKET_FLAGS_ok_as_delegate 0x00040000 927#define KERB_TICKET_FLAGS_name_canonicalize 0x00010000 928#define KERB_TICKET_FLAGS_reserved1 0x00000001 929 930#define KRB_NT_UNKNOWN 0 931#define KRB_NT_PRINCIPAL 1 932#define KRB_NT_PRINCIPAL_AND_ID -131 933#define KRB_NT_SRV_INST 2 934#define KRB_NT_SRV_INST_AND_ID -132 935#define KRB_NT_SRV_HST 3 936#define KRB_NT_SRV_XHST 4 937#define KRB_NT_UID 5 938#define KRB_NT_ENTERPRISE_PRINCIPAL 10 939#define KRB_NT_ENT_PRINCIPAL_AND_ID -130 940#define KRB_NT_MS_PRINCIPAL -128 941#define KRB_NT_MS_PRINCIPAL_AND_ID -129 942 943#define KERB_IS_MS_PRINCIPAL(_x_) (((_x_) <= KRB_NT_MS_PRINCIPAL) || ((_x_) >= KRB_NT_ENTERPRISE_PRINCIPAL)) 944 945#ifndef MICROSOFT_KERBEROS_NAME_A 946 947#define MICROSOFT_KERBEROS_NAME_A "Kerberos" 948#define MICROSOFT_KERBEROS_NAME_W L"Kerberos" 949#ifdef WIN32_CHICAGO 950#define MICROSOFT_KERBEROS_NAME MICROSOFT_KERBEROS_NAME_A 951#else 952#define MICROSOFT_KERBEROS_NAME MICROSOFT_KERBEROS_NAME_W 953#endif 954#endif 955 956#define KERB_WRAP_NO_ENCRYPT 0x80000001 957 958 typedef enum _KERB_LOGON_SUBMIT_TYPE { 959 KerbInteractiveLogon = 2,KerbSmartCardLogon = 6,KerbWorkstationUnlockLogon = 7,KerbSmartCardUnlockLogon = 8,KerbProxyLogon = 9, 960 KerbTicketLogon = 10,KerbTicketUnlockLogon = 11,KerbS4ULogon = 12 961#if (_WIN32_WINNT >= 0x0600) 962 ,KerbCertificateLogon = 13, 963 KerbCertificateS4ULogon = 14, 964 KerbCertificateUnlockLogon = 15 965#endif 966 } KERB_LOGON_SUBMIT_TYPE,*PKERB_LOGON_SUBMIT_TYPE; 967 968 typedef struct _KERB_INTERACTIVE_LOGON { 969 KERB_LOGON_SUBMIT_TYPE MessageType; 970 UNICODE_STRING LogonDomainName; 971 UNICODE_STRING UserName; 972 UNICODE_STRING Password; 973 } KERB_INTERACTIVE_LOGON,*PKERB_INTERACTIVE_LOGON; 974 975 typedef struct _KERB_INTERACTIVE_UNLOCK_LOGON { 976 KERB_INTERACTIVE_LOGON Logon; 977 LUID LogonId; 978 } KERB_INTERACTIVE_UNLOCK_LOGON,*PKERB_INTERACTIVE_UNLOCK_LOGON; 979 980 typedef struct _KERB_SMART_CARD_LOGON { 981 KERB_LOGON_SUBMIT_TYPE MessageType; 982 UNICODE_STRING Pin; 983 ULONG CspDataLength; 984 PUCHAR CspData; 985 } KERB_SMART_CARD_LOGON,*PKERB_SMART_CARD_LOGON; 986 987 typedef struct _KERB_SMART_CARD_UNLOCK_LOGON { 988 KERB_SMART_CARD_LOGON Logon; 989 LUID LogonId; 990 } KERB_SMART_CARD_UNLOCK_LOGON,*PKERB_SMART_CARD_UNLOCK_LOGON; 991 992 typedef struct _KERB_TICKET_LOGON { 993 KERB_LOGON_SUBMIT_TYPE MessageType; 994 ULONG Flags; 995 ULONG ServiceTicketLength; 996 ULONG TicketGrantingTicketLength; 997 PUCHAR ServiceTicket; 998 PUCHAR TicketGrantingTicket; 999 } KERB_TICKET_LOGON,*PKERB_TICKET_LOGON; 1000 1001#define KERB_LOGON_FLAG_ALLOW_EXPIRED_TICKET 0x1 1002 1003 typedef struct _KERB_TICKET_UNLOCK_LOGON { 1004 KERB_TICKET_LOGON Logon; 1005 LUID LogonId; 1006 } KERB_TICKET_UNLOCK_LOGON,*PKERB_TICKET_UNLOCK_LOGON; 1007 1008 typedef struct _KERB_S4U_LOGON { 1009 KERB_LOGON_SUBMIT_TYPE MessageType; 1010 ULONG Flags; 1011 UNICODE_STRING ClientUpn; 1012 UNICODE_STRING ClientRealm; 1013 } KERB_S4U_LOGON,*PKERB_S4U_LOGON; 1014 1015 typedef enum _KERB_PROFILE_BUFFER_TYPE { 1016 KerbInteractiveProfile = 2,KerbSmartCardProfile = 4,KerbTicketProfile = 6 1017 } KERB_PROFILE_BUFFER_TYPE,*PKERB_PROFILE_BUFFER_TYPE; 1018 1019 typedef struct _KERB_INTERACTIVE_PROFILE { 1020 KERB_PROFILE_BUFFER_TYPE MessageType; 1021 USHORT LogonCount; 1022 USHORT BadPasswordCount; 1023 LARGE_INTEGER LogonTime; 1024 LARGE_INTEGER LogoffTime; 1025 LARGE_INTEGER KickOffTime; 1026 LARGE_INTEGER PasswordLastSet; 1027 LARGE_INTEGER PasswordCanChange; 1028 LARGE_INTEGER PasswordMustChange; 1029 UNICODE_STRING LogonScript; 1030 UNICODE_STRING HomeDirectory; 1031 UNICODE_STRING FullName; 1032 UNICODE_STRING ProfilePath; 1033 UNICODE_STRING HomeDirectoryDrive; 1034 UNICODE_STRING LogonServer; 1035 ULONG UserFlags; 1036 } KERB_INTERACTIVE_PROFILE,*PKERB_INTERACTIVE_PROFILE; 1037 1038 typedef struct _KERB_SMART_CARD_PROFILE { 1039 KERB_INTERACTIVE_PROFILE Profile; 1040 ULONG CertificateSize; 1041 PUCHAR CertificateData; 1042 } KERB_SMART_CARD_PROFILE,*PKERB_SMART_CARD_PROFILE; 1043 1044 typedef struct KERB_CRYPTO_KEY { 1045 LONG KeyType; 1046 ULONG Length; 1047 PUCHAR Value; 1048 } KERB_CRYPTO_KEY,*PKERB_CRYPTO_KEY; 1049 1050 typedef struct _KERB_TICKET_PROFILE { 1051 KERB_INTERACTIVE_PROFILE Profile; 1052 KERB_CRYPTO_KEY SessionKey; 1053 } KERB_TICKET_PROFILE,*PKERB_TICKET_PROFILE; 1054 1055 typedef enum _KERB_PROTOCOL_MESSAGE_TYPE { 1056 KerbDebugRequestMessage = 0,KerbQueryTicketCacheMessage,KerbChangeMachinePasswordMessage,KerbVerifyPacMessage,KerbRetrieveTicketMessage, 1057 KerbUpdateAddressesMessage,KerbPurgeTicketCacheMessage,KerbChangePasswordMessage,KerbRetrieveEncodedTicketMessage,KerbDecryptDataMessage, 1058 KerbAddBindingCacheEntryMessage,KerbSetPasswordMessage,KerbSetPasswordExMessage,KerbVerifyCredentialsMessage,KerbQueryTicketCacheExMessage, 1059 KerbPurgeTicketCacheExMessage,KerbRefreshSmartcardCredentialsMessage,KerbAddExtraCredentialsMessage,KerbQuerySupplementalCredentialsMessage, 1060 KerbTransferCredentialsMessage,KerbQueryTicketCacheEx2Message 1061 } KERB_PROTOCOL_MESSAGE_TYPE,*PKERB_PROTOCOL_MESSAGE_TYPE; 1062 1063 typedef struct _KERB_QUERY_TKT_CACHE_REQUEST { 1064 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1065 LUID LogonId; 1066 } KERB_QUERY_TKT_CACHE_REQUEST,*PKERB_QUERY_TKT_CACHE_REQUEST; 1067 1068 typedef struct _KERB_TICKET_CACHE_INFO { 1069 UNICODE_STRING ServerName; 1070 UNICODE_STRING RealmName; 1071 LARGE_INTEGER StartTime; 1072 LARGE_INTEGER EndTime; 1073 LARGE_INTEGER RenewTime; 1074 LONG EncryptionType; 1075 ULONG TicketFlags; 1076 } KERB_TICKET_CACHE_INFO,*PKERB_TICKET_CACHE_INFO; 1077 1078 typedef struct _KERB_TICKET_CACHE_INFO_EX { 1079 UNICODE_STRING ClientName; 1080 UNICODE_STRING ClientRealm; 1081 UNICODE_STRING ServerName; 1082 UNICODE_STRING ServerRealm; 1083 LARGE_INTEGER StartTime; 1084 LARGE_INTEGER EndTime; 1085 LARGE_INTEGER RenewTime; 1086 LONG EncryptionType; 1087 ULONG TicketFlags; 1088 } KERB_TICKET_CACHE_INFO_EX,*PKERB_TICKET_CACHE_INFO_EX; 1089 1090 typedef struct _KERB_TICKET_CACHE_INFO_EX2 { 1091 UNICODE_STRING ClientName; 1092 UNICODE_STRING ClientRealm; 1093 UNICODE_STRING ServerName; 1094 UNICODE_STRING ServerRealm; 1095 LARGE_INTEGER StartTime; 1096 LARGE_INTEGER EndTime; 1097 LARGE_INTEGER RenewTime; 1098 LONG EncryptionType; 1099 ULONG TicketFlags; 1100 ULONG SessionKeyType; 1101 } KERB_TICKET_CACHE_INFO_EX2,*PKERB_TICKET_CACHE_INFO_EX2; 1102 1103 typedef struct _KERB_QUERY_TKT_CACHE_RESPONSE { 1104 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1105 ULONG CountOfTickets; 1106 KERB_TICKET_CACHE_INFO Tickets[ANYSIZE_ARRAY]; 1107 } KERB_QUERY_TKT_CACHE_RESPONSE,*PKERB_QUERY_TKT_CACHE_RESPONSE; 1108 1109 typedef struct _KERB_QUERY_TKT_CACHE_EX_RESPONSE { 1110 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1111 ULONG CountOfTickets; 1112 KERB_TICKET_CACHE_INFO_EX Tickets[ANYSIZE_ARRAY]; 1113 } KERB_QUERY_TKT_CACHE_EX_RESPONSE,*PKERB_QUERY_TKT_CACHE_EX_RESPONSE; 1114 1115 typedef struct _KERB_QUERY_TKT_CACHE_EX2_RESPONSE { 1116 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1117 ULONG CountOfTickets; 1118 KERB_TICKET_CACHE_INFO_EX2 Tickets[ANYSIZE_ARRAY]; 1119 } KERB_QUERY_TKT_CACHE_EX2_RESPONSE,*PKERB_QUERY_TKT_CACHE_EX2_RESPONSE; 1120 1121#ifndef __SECHANDLE_DEFINED__ 1122 typedef struct _SecHandle { 1123 ULONG_PTR dwLower; 1124 ULONG_PTR dwUpper; 1125 } SecHandle,*PSecHandle; 1126 1127#define __SECHANDLE_DEFINED__ 1128#endif 1129 1130#define KERB_USE_DEFAULT_TICKET_FLAGS 0x0 1131 1132#define KERB_RETRIEVE_TICKET_DEFAULT 0x0 1133#define KERB_RETRIEVE_TICKET_DONT_USE_CACHE 0x1 1134#define KERB_RETRIEVE_TICKET_USE_CACHE_ONLY 0x2 1135#define KERB_RETRIEVE_TICKET_USE_CREDHANDLE 0x4 1136#define KERB_RETRIEVE_TICKET_AS_KERB_CRED 0x8 1137#define KERB_RETRIEVE_TICKET_WITH_SEC_CRED 0x10 1138#define KERB_RETRIEVE_TICKET_CACHE_TICKET 0x20 1139 1140#define KERB_ETYPE_DEFAULT 0x0 1141 1142 typedef struct _KERB_AUTH_DATA { 1143 ULONG Type; 1144 ULONG Length; 1145 PUCHAR Data; 1146 } KERB_AUTH_DATA,*PKERB_AUTH_DATA; 1147 1148 typedef struct _KERB_NET_ADDRESS { 1149 ULONG Family; 1150 ULONG Length; 1151 PCHAR Address; 1152 } KERB_NET_ADDRESS,*PKERB_NET_ADDRESS; 1153 1154 typedef struct _KERB_NET_ADDRESSES { 1155 ULONG Number; 1156 KERB_NET_ADDRESS Addresses[ANYSIZE_ARRAY]; 1157 } KERB_NET_ADDRESSES,*PKERB_NET_ADDRESSES; 1158 1159 typedef struct _KERB_EXTERNAL_NAME { 1160 SHORT NameType; 1161 USHORT NameCount; 1162 UNICODE_STRING Names[ANYSIZE_ARRAY]; 1163 } KERB_EXTERNAL_NAME,*PKERB_EXTERNAL_NAME; 1164 1165 typedef struct _KERB_EXTERNAL_TICKET { 1166 PKERB_EXTERNAL_NAME ServiceName; 1167 PKERB_EXTERNAL_NAME TargetName; 1168 PKERB_EXTERNAL_NAME ClientName; 1169 UNICODE_STRING DomainName; 1170 UNICODE_STRING TargetDomainName; 1171 UNICODE_STRING AltTargetDomainName; 1172 KERB_CRYPTO_KEY SessionKey; 1173 ULONG TicketFlags; 1174 ULONG Flags; 1175 LARGE_INTEGER KeyExpirationTime; 1176 LARGE_INTEGER StartTime; 1177 LARGE_INTEGER EndTime; 1178 LARGE_INTEGER RenewUntil; 1179 LARGE_INTEGER TimeSkew; 1180 ULONG EncodedTicketSize; 1181 PUCHAR EncodedTicket; 1182 } KERB_EXTERNAL_TICKET,*PKERB_EXTERNAL_TICKET; 1183 1184 typedef struct _KERB_RETRIEVE_TKT_REQUEST { 1185 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1186 LUID LogonId; 1187 UNICODE_STRING TargetName; 1188 ULONG TicketFlags; 1189 ULONG CacheOptions; 1190 LONG EncryptionType; 1191 SecHandle CredentialsHandle; 1192 } KERB_RETRIEVE_TKT_REQUEST,*PKERB_RETRIEVE_TKT_REQUEST; 1193 1194 typedef struct _KERB_RETRIEVE_TKT_RESPONSE { 1195 KERB_EXTERNAL_TICKET Ticket; 1196 } KERB_RETRIEVE_TKT_RESPONSE,*PKERB_RETRIEVE_TKT_RESPONSE; 1197 1198 typedef struct _KERB_PURGE_TKT_CACHE_REQUEST { 1199 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1200 LUID LogonId; 1201 UNICODE_STRING ServerName; 1202 UNICODE_STRING RealmName; 1203 } KERB_PURGE_TKT_CACHE_REQUEST,*PKERB_PURGE_TKT_CACHE_REQUEST; 1204 1205#define KERB_PURGE_ALL_TICKETS 1 1206 1207 typedef struct _KERB_PURGE_TKT_CACHE_EX_REQUEST { 1208 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1209 LUID LogonId; 1210 ULONG Flags; 1211 KERB_TICKET_CACHE_INFO_EX TicketTemplate; 1212 } KERB_PURGE_TKT_CACHE_EX_REQUEST,*PKERB_PURGE_TKT_CACHE_EX_REQUEST; 1213 1214 typedef struct _KERB_CHANGEPASSWORD_REQUEST { 1215 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1216 UNICODE_STRING DomainName; 1217 UNICODE_STRING AccountName; 1218 UNICODE_STRING OldPassword; 1219 UNICODE_STRING NewPassword; 1220 BOOLEAN Impersonating; 1221 } KERB_CHANGEPASSWORD_REQUEST,*PKERB_CHANGEPASSWORD_REQUEST; 1222 1223 typedef struct _KERB_SETPASSWORD_REQUEST { 1224 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1225 LUID LogonId; 1226 SecHandle CredentialsHandle; 1227 ULONG Flags; 1228 UNICODE_STRING DomainName; 1229 UNICODE_STRING AccountName; 1230 UNICODE_STRING Password; 1231 } KERB_SETPASSWORD_REQUEST,*PKERB_SETPASSWORD_REQUEST; 1232 1233 typedef struct _KERB_SETPASSWORD_EX_REQUEST { 1234 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1235 LUID LogonId; 1236 SecHandle CredentialsHandle; 1237 ULONG Flags; 1238 UNICODE_STRING AccountRealm; 1239 UNICODE_STRING AccountName; 1240 UNICODE_STRING Password; 1241 UNICODE_STRING ClientRealm; 1242 UNICODE_STRING ClientName; 1243 BOOLEAN Impersonating; 1244 UNICODE_STRING KdcAddress; 1245 ULONG KdcAddressType; 1246 } KERB_SETPASSWORD_EX_REQUEST,*PKERB_SETPASSWORD_EX_REQUEST; 1247 1248#define DS_UNKNOWN_ADDRESS_TYPE 0 1249#define KERB_SETPASS_USE_LOGONID 1 1250#define KERB_SETPASS_USE_CREDHANDLE 2 1251 1252 typedef struct _KERB_DECRYPT_REQUEST { 1253 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1254 LUID LogonId; 1255 ULONG Flags; 1256 LONG CryptoType; 1257 LONG KeyUsage; 1258 KERB_CRYPTO_KEY Key; 1259 ULONG EncryptedDataSize; 1260 ULONG InitialVectorSize; 1261 PUCHAR InitialVector; 1262 PUCHAR EncryptedData; 1263 } KERB_DECRYPT_REQUEST,*PKERB_DECRYPT_REQUEST; 1264 1265#define KERB_DECRYPT_FLAG_DEFAULT_KEY 0x00000001 1266 1267 typedef struct _KERB_DECRYPT_RESPONSE { 1268 UCHAR DecryptedData[ANYSIZE_ARRAY]; 1269 } KERB_DECRYPT_RESPONSE,*PKERB_DECRYPT_RESPONSE; 1270 1271 typedef struct _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST { 1272 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1273 UNICODE_STRING RealmName; 1274 UNICODE_STRING KdcAddress; 1275 ULONG AddressType; 1276 } KERB_ADD_BINDING_CACHE_ENTRY_REQUEST,*PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST; 1277 1278 typedef struct _KERB_REFRESH_SCCRED_REQUEST { 1279 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1280 UNICODE_STRING CredentialBlob; 1281 LUID LogonId; 1282 ULONG Flags; 1283 } KERB_REFRESH_SCCRED_REQUEST,*PKERB_REFRESH_SCCRED_REQUEST; 1284 1285#define KERB_REFRESH_SCCRED_RELEASE 0x0 1286#define KERB_REFRESH_SCCRED_GETTGT 0x1 1287 1288 typedef struct _KERB_ADD_CREDENTIALS_REQUEST { 1289 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1290 UNICODE_STRING UserName; 1291 UNICODE_STRING DomainName; 1292 UNICODE_STRING Password; 1293 LUID LogonId; 1294 ULONG Flags; 1295 } KERB_ADD_CREDENTIALS_REQUEST,*PKERB_ADD_CREDENTIALS_REQUEST; 1296 1297#define KERB_REQUEST_ADD_CREDENTIAL 1 1298#define KERB_REQUEST_REPLACE_CREDENTIAL 2 1299#define KERB_REQUEST_REMOVE_CREDENTIAL 4 1300 1301 typedef struct _KERB_TRANSFER_CRED_REQUEST { 1302 KERB_PROTOCOL_MESSAGE_TYPE MessageType; 1303 LUID OriginLogonId; 1304 LUID DestinationLogonId; 1305 ULONG Flags; 1306 } KERB_TRANSFER_CRED_REQUEST,*PKERB_TRANSFER_CRED_REQUEST; 1307 1308#if (_WIN32_WINNT >= 0x0600) 1309 1310#define POLICY_AUDIT_EVENT_UNCHANGED 0x00000000 1311#define POLICY_AUDIT_EVENT_SUCCESS 0x00000001 1312#define POLICY_AUDIT_EVENT_FAILURE 0x00000002 1313#define POLICY_AUDIT_EVENT_NONE 0x00000004 1314#define PER_USER_POLICY_UNCHANGED 0x00 1315#define PER_USER_AUDIT_SUCCESS_INCLUDE 0x01 1316#define PER_USER_AUDIT_SUCCESS_EXCLUDE 0x02 1317#define PER_USER_AUDIT_FAILURE_INCLUDE 0x04 1318#define PER_USER_AUDIT_FAILURE_EXCLUDE 0x08 1319#define PER_USER_AUDIT_NONE 0x10 1320 1321 typedef struct _AUDIT_POLICY_INFORMATION { 1322 GUID AuditSubCategoryGuid; 1323 ULONG AuditingInformation; 1324 GUID AuditCategoryGuid; 1325 } AUDIT_POLICY_INFORMATION, *PAUDIT_POLICY_INFORMATION, *PCAUDIT_POLICY_INFORMATION; 1326 1327 typedef struct _POLICY_AUDIT_SID_ARRAY { 1328 ULONG UsersCount; 1329 PSID *UserSidArray; 1330 } POLICY_AUDIT_SID_ARRAY, *PPOLICY_AUDIT_SID_ARRAY; 1331 1332 typedef struct _KERB_CERTIFICATE_LOGON { 1333 KERB_LOGON_SUBMIT_TYPE MessageType; 1334 UNICODE_STRING DomainName; 1335 UNICODE_STRING UserName; 1336 UNICODE_STRING Pin; 1337 ULONG Flags; 1338 ULONG CspDataLength; 1339 PUCHAR CspData; 1340 } KERB_CERTIFICATE_LOGON, *PKERB_CERTIFICATE_LOGON; 1341 1342 typedef struct _KERB_CERTIFICATE_UNLOCK_LOGON { 1343 KERB_CERTIFICATE_LOGON Logon; 1344 LUID LogonId; 1345 } KERB_CERTIFICATE_UNLOCK_LOGON, *PKERB_CERTIFICATE_UNLOCK_LOGON; 1346 1347 typedef struct _KERB_SMARTCARD_CSP_INFO { 1348 DWORD dwCspInfoLen; 1349 DWORD MessageType; 1350 __C89_NAMELESS union { 1351 PVOID ContextInformation; 1352 ULONG64 SpaceHolderForWow64; 1353 }; 1354 DWORD flags; 1355 DWORD KeySpec; 1356 ULONG nCardNameOffset; 1357 ULONG nReaderNameOffset; 1358 ULONG nContainerNameOffset; 1359 ULONG nCSPNameOffset; 1360 TCHAR bBuffer; 1361 } KERB_SMARTCARD_CSP_INFO, *PKERB_SMARTCARD_CSP_INFO; 1362 1363 BOOLEAN WINAPI AuditComputeEffectivePolicyBySid( 1364 const PSID pSid, 1365 const GUID *pSubCategoryGuids, 1366 ULONG PolicyCount, 1367 PAUDIT_POLICY_INFORMATION *ppAuditPolicy 1368 ); 1369 1370 VOID WINAPI AuditFree( 1371 PVOID Buffer 1372 ); 1373 1374 BOOLEAN WINAPI AuditSetSystemPolicy( 1375 PCAUDIT_POLICY_INFORMATION pAuditPolicy, 1376 ULONG PolicyCount 1377 ); 1378 1379 BOOLEAN WINAPI AuditQuerySystemPolicy( 1380 const GUID *pSubCategoryGuids, 1381 ULONG PolicyCount, 1382 PAUDIT_POLICY_INFORMATION *ppAuditPolicy 1383 ); 1384 1385 BOOLEAN WINAPI AuditSetPerUserPolicy( 1386 const PSID pSid, 1387 PCAUDIT_POLICY_INFORMATION pAuditPolicy, 1388 ULONG PolicyCount 1389 ); 1390 1391 BOOLEAN WINAPI AuditQueryPerUserPolicy( 1392 const PSID pSid, 1393 const GUID *pSubCategoryGuids, 1394 ULONG PolicyCount, 1395 PAUDIT_POLICY_INFORMATION *ppAuditPolicy 1396 ); 1397 1398 BOOLEAN WINAPI AuditComputeEffectivePolicyByToken( 1399 HANDLE hTokenHandle, 1400 const GUID *pSubCategoryGuids, 1401 ULONG PolicyCount, 1402 PAUDIT_POLICY_INFORMATION *ppAuditPolicy 1403 ); 1404 1405 BOOLEAN WINAPI AuditEnumerateCategories( 1406 GUID **ppAuditCategoriesArray, 1407 PULONG pCountReturned 1408 ); 1409 1410 BOOLEAN WINAPI AuditEnumeratePerUserPolicy( 1411 PPOLICY_AUDIT_SID_ARRAY *ppAuditSidArray 1412 ); 1413 1414 BOOLEAN WINAPI AuditEnumerateSubCategories( 1415 const GUID *pAuditCategoryGuid, 1416 BOOLEAN bRetrieveAllSubCategories, 1417 GUID **ppAuditSubCategoriesArray, 1418 PULONG pCountReturned 1419 ); 1420 1421 BOOLEAN WINAPI AuditLookupCategoryGuidFromCategoryId( 1422 POLICY_AUDIT_EVENT_TYPE AuditCategoryId, 1423 GUID *pAuditCategoryGuid 1424 ); 1425 1426 BOOLEAN WINAPI AuditQuerySecurity( 1427 SECURITY_INFORMATION SecurityInformation, 1428 PSECURITY_DESCRIPTOR *ppSecurityDescriptor 1429 ); 1430 1431#define AuditLookupSubCategoryName __MINGW_NAME_AW(AuditLookupSubCategoryName) 1432#define AuditLookupCategoryName __MINGW_NAME_AW(AuditLookupCategoryName) 1433 1434 BOOLEAN WINAPI AuditLookupSubCategoryNameA( 1435 const GUID *pAuditSubCategoryGuid, 1436 LPSTR *ppszSubCategoryName 1437 ); 1438 1439 BOOLEAN WINAPI AuditLookupSubCategoryNameW( 1440 const GUID *pAuditSubCategoryGuid, 1441 LPWSTR *ppszSubCategoryName 1442 ); 1443 1444 BOOLEAN WINAPI AuditLookupCategoryNameA( 1445 const GUID *pAuditCategoryGuid, 1446 LPSTR *ppszCategoryName 1447 ); 1448 1449 BOOLEAN WINAPI AuditLookupCategoryNameW( 1450 const GUID *pAuditCategoryGuid, 1451 LPWSTR *ppszCategoryName 1452 ); 1453 1454 BOOLEAN WINAPI AuditLookupCategoryIdFromCategoryGuid( 1455 const GUID *pAuditCategoryGuid, 1456 PPOLICY_AUDIT_EVENT_TYPE pAuditCategoryId 1457 ); 1458 1459 BOOLEAN WINAPI AuditSetSecurity( 1460 SECURITY_INFORMATION SecurityInformation, 1461 PSECURITY_DESCRIPTOR pSecurityDescriptor 1462 ); 1463 1464#endif /*(_WIN32_WINNT >= 0x0600)*/ 1465 1466#ifdef __cplusplus 1467} 1468#endif 1469#endif 1470