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 10 extern "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