include/ntsecapi.h: Add missing definitions.

Signed-off-by: Mark Harmstone <mark@harmstone.com>
Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/ntsecapi.h b/mingw-w64-headers/include/ntsecapi.h
index 2d4f141..edef4d5 100644
--- a/mingw-w64-headers/include/ntsecapi.h
+++ b/mingw-w64-headers/include/ntsecapi.h
@@ -3,6 +3,485 @@
  * This file is part of the mingw-w64 runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
+
+#ifdef DEFINE_GUID
+
+#if !defined(INITGUID) || !defined(Audit_System_SecurityStateChange_defined)
+DEFINE_GUID(Audit_System_SecurityStateChange, 0x0cce9210, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_System_SecurityStateChange_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_System_SecuritySubsystemExtension_defined)
+DEFINE_GUID(Audit_System_SecuritySubsystemExtension, 0x0cce9211, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_System_SecuritySubsystemExtension_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_System_Integrity_defined)
+DEFINE_GUID(Audit_System_Integrity, 0x0cce9212, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_System_Integrity_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_System_IPSecDriverEvents_defined)
+DEFINE_GUID(Audit_System_IPSecDriverEvents, 0x0cce9213, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_System_IPSecDriverEvents_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_System_Others_defined)
+DEFINE_GUID(Audit_System_Others, 0x0cce9214, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_System_Others_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_Logon_defined)
+DEFINE_GUID(Audit_Logon_Logon, 0x0cce9215, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_Logon_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_Logoff_defined)
+DEFINE_GUID(Audit_Logon_Logoff, 0x0cce9216, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_Logoff_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_AccountLockout_defined)
+DEFINE_GUID(Audit_Logon_AccountLockout, 0x0cce9217, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_AccountLockout_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_IPSecMainMode_defined)
+DEFINE_GUID(Audit_Logon_IPSecMainMode, 0x0cce9218, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_IPSecMainMode_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_IPSecQuickMode_defined)
+DEFINE_GUID(Audit_Logon_IPSecQuickMode, 0x0cce9219, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_IPSecQuickMode_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_IPSecUserMode_defined)
+DEFINE_GUID(Audit_Logon_IPSecUserMode, 0x0cce921a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_IPSecUserMode_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_SpecialLogon_defined)
+DEFINE_GUID(Audit_Logon_SpecialLogon, 0x0cce921b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_SpecialLogon_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_Others_defined)
+DEFINE_GUID(Audit_Logon_Others, 0x0cce921c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_Others_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_FileSystem_defined)
+DEFINE_GUID(Audit_ObjectAccess_FileSystem, 0x0cce921d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_FileSystem_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_Registry_defined)
+DEFINE_GUID(Audit_ObjectAccess_Registry, 0x0cce921e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_Registry_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_Kernel_defined)
+DEFINE_GUID(Audit_ObjectAccess_Kernel, 0x0cce921f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_Kernel_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_Sam_defined)
+DEFINE_GUID(Audit_ObjectAccess_Sam, 0x0cce9220, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_Sam_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_CertificationServices_defined)
+DEFINE_GUID(Audit_ObjectAccess_CertificationServices, 0x0cce9221, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_CertificationServices_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_ApplicationGenerated_defined)
+DEFINE_GUID(Audit_ObjectAccess_ApplicationGenerated, 0x0cce9222, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_ApplicationGenerated_defined
+#endif
+#endif
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_Handle_defined)
+DEFINE_GUID(Audit_ObjectAccess_Handle, 0x0cce9223, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_Handle_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_Share_defined)
+DEFINE_GUID(Audit_ObjectAccess_Share, 0x0cce9224, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_Share_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_FirewallPacketDrops_defined)
+DEFINE_GUID(Audit_ObjectAccess_FirewallPacketDrops, 0x0cce9225, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_FirewallPacketDrops_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_FirewallConnection_defined)
+DEFINE_GUID(Audit_ObjectAccess_FirewallConnection, 0x0cce9226, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_FirewallConnection_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_Other_defined)
+DEFINE_GUID(Audit_ObjectAccess_Other, 0x0cce9227, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_Other_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PrivilegeUse_Sensitive_defined)
+DEFINE_GUID(Audit_PrivilegeUse_Sensitive, 0x0cce9228, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PrivilegeUse_Sensitive_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PrivilegeUse_NonSensitive_defined)
+DEFINE_GUID(Audit_PrivilegeUse_NonSensitive, 0x0cce9229, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PrivilegeUse_NonSensitive_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PrivilegeUse_Others_defined)
+DEFINE_GUID(Audit_PrivilegeUse_Others, 0x0cce922a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PrivilegeUse_Others_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DetailedTracking_ProcessCreation_defined)
+DEFINE_GUID(Audit_DetailedTracking_ProcessCreation, 0x0cce922b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DetailedTracking_ProcessCreation_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DetailedTracking_ProcessTermination_defined)
+DEFINE_GUID(Audit_DetailedTracking_ProcessTermination, 0x0cce922c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DetailedTracking_ProcessTermination_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DetailedTracking_DpapiActivity_defined)
+DEFINE_GUID(Audit_DetailedTracking_DpapiActivity, 0x0cce922d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DetailedTracking_DpapiActivity_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DetailedTracking_RpcCall_defined)
+DEFINE_GUID(Audit_DetailedTracking_RpcCall, 0x0cce922e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DetailedTracking_RpcCall_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PolicyChange_AuditPolicy_defined)
+DEFINE_GUID(Audit_PolicyChange_AuditPolicy, 0x0cce922f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PolicyChange_AuditPolicy_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PolicyChange_AuthenticationPolicy_defined)
+DEFINE_GUID(Audit_PolicyChange_AuthenticationPolicy, 0x0cce9230, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PolicyChange_AuthenticationPolicy_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PolicyChange_AuthorizationPolicy_defined)
+DEFINE_GUID(Audit_PolicyChange_AuthorizationPolicy, 0x0cce9231, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PolicyChange_AuthorizationPolicy_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PolicyChange_MpsscvRulePolicy_defined)
+DEFINE_GUID(Audit_PolicyChange_MpsscvRulePolicy, 0x0cce9232, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PolicyChange_MpsscvRulePolicy_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PolicyChange_WfpIPSecPolicy_defined)
+DEFINE_GUID(Audit_PolicyChange_WfpIPSecPolicy, 0x0cce9233, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PolicyChange_WfpIPSecPolicy_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PolicyChange_Others_defined)
+DEFINE_GUID(Audit_PolicyChange_Others, 0x0cce9234, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PolicyChange_Others_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountManagement_UserAccount_defined)
+DEFINE_GUID(Audit_AccountManagement_UserAccount, 0x0cce9235, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountManagement_UserAccount_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountManagement_ComputerAccount_defined)
+DEFINE_GUID(Audit_AccountManagement_ComputerAccount, 0x0cce9236, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountManagement_ComputerAccount_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountManagement_SecurityGroup_defined)
+DEFINE_GUID(Audit_AccountManagement_SecurityGroup, 0x0cce9237, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountManagement_SecurityGroup_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountManagement_DistributionGroup_defined)
+DEFINE_GUID(Audit_AccountManagement_DistributionGroup, 0x0cce9238, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountManagement_DistributionGroup_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountManagement_ApplicationGroup_defined)
+DEFINE_GUID(Audit_AccountManagement_ApplicationGroup, 0x0cce9239, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountManagement_ApplicationGroup_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountManagement_Others_defined)
+DEFINE_GUID(Audit_AccountManagement_Others, 0x0cce923a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountManagement_Others_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DSAccess_DSAccess_defined)
+DEFINE_GUID(Audit_DSAccess_DSAccess, 0x0cce923b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DSAccess_DSAccess_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DsAccess_AdAuditChanges_defined)
+DEFINE_GUID(Audit_DsAccess_AdAuditChanges, 0x0cce923c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DsAccess_AdAuditChanges_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Ds_Replication_defined)
+DEFINE_GUID(Audit_Ds_Replication, 0x0cce923d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Ds_Replication_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Ds_DetailedReplication_defined)
+DEFINE_GUID(Audit_Ds_DetailedReplication, 0x0cce923e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Ds_DetailedReplication_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountLogon_CredentialValidation_defined)
+DEFINE_GUID(Audit_AccountLogon_CredentialValidation, 0x0cce923f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountLogon_CredentialValidation_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountLogon_Kerberos_defined)
+DEFINE_GUID(Audit_AccountLogon_Kerberos, 0x0cce9240, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountLogon_Kerberos_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountLogon_Others_defined)
+DEFINE_GUID(Audit_AccountLogon_Others, 0x0cce9241, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountLogon_Others_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountLogon_KerbCredentialValidation_defined)
+DEFINE_GUID(Audit_AccountLogon_KerbCredentialValidation, 0x0cce9242, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountLogon_KerbCredentialValidation_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_NPS_defined)
+DEFINE_GUID(Audit_Logon_NPS, 0x0cce9243, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_NPS_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_DetailedFileShare_defined)
+DEFINE_GUID(Audit_ObjectAccess_DetailedFileShare, 0x0cce9244, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_DetailedFileShare_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_RemovableStorage_defined)
+DEFINE_GUID(Audit_ObjectAccess_RemovableStorage, 0x0cce9245, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_RemovableStorage_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_CbacStaging_defined)
+DEFINE_GUID(Audit_ObjectAccess_CbacStaging, 0x0cce9246, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_CbacStaging_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_Claims_defined)
+DEFINE_GUID(Audit_Logon_Claims, 0x0cce9247, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_Claims_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DetailedTracking_PnpActivity_defined)
+DEFINE_GUID(Audit_DetailedTracking_PnpActivity, 0x0cce9248, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DetailedTracking_PnpActivity_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_Groups_defined)
+DEFINE_GUID(Audit_Logon_Groups, 0x0cce9249, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_Groups_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DetailedTracking_TokenRightAdjusted_defined)
+DEFINE_GUID(Audit_DetailedTracking_TokenRightAdjusted, 0x0cce924a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DetailedTracking_TokenRightAdjusted_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_System_defined)
+DEFINE_GUID(Audit_System, 0x69979848, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_System_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_Logon_defined)
+DEFINE_GUID(Audit_Logon, 0x69979849, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_Logon_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_ObjectAccess_defined)
+DEFINE_GUID(Audit_ObjectAccess, 0x6997984a, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_ObjectAccess_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PrivilegeUse_defined)
+DEFINE_GUID(Audit_PrivilegeUse, 0x6997984b, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PrivilegeUse_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DetailedTracking_defined)
+DEFINE_GUID(Audit_DetailedTracking, 0x6997984c, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DetailedTracking_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_PolicyChange_defined)
+DEFINE_GUID(Audit_PolicyChange, 0x6997984d, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_PolicyChange_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountManagement_defined)
+DEFINE_GUID(Audit_AccountManagement, 0x6997984e, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountManagement_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_DirectoryServiceAccess_defined)
+DEFINE_GUID(Audit_DirectoryServiceAccess, 0x6997984f, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_DirectoryServiceAccess_defined
+#endif
+#endif
+
+#if !defined(INITGUID) || !defined(Audit_AccountLogon_defined)
+DEFINE_GUID(Audit_AccountLogon, 0x69979850, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
+#ifdef INITGUID
+#define Audit_AccountLogon_defined
+#endif
+#endif
+#endif
+
 #ifndef _NTSECAPI_
 #define _NTSECAPI_
 
@@ -414,9 +893,19 @@
   typedef PVOID LSA_HANDLE,*PLSA_HANDLE;
 
   typedef enum _TRUSTED_INFORMATION_CLASS {
-    TrustedDomainNameInformation = 1,TrustedControllersInformation,TrustedPosixOffsetInformation,TrustedPasswordInformation,
-    TrustedDomainInformationBasic,TrustedDomainInformationEx,TrustedDomainAuthInformation,TrustedDomainFullInformation,
-    TrustedDomainAuthInformationInternal,TrustedDomainFullInformationInternal,TrustedDomainInformationEx2Internal,TrustedDomainFullInformation2Internal
+    TrustedDomainNameInformation = 1,
+    TrustedControllersInformation,
+    TrustedPosixOffsetInformation,
+    TrustedPasswordInformation,
+    TrustedDomainInformationBasic,
+    TrustedDomainInformationEx,
+    TrustedDomainAuthInformation,
+    TrustedDomainFullInformation,
+    TrustedDomainAuthInformationInternal,
+    TrustedDomainFullInformationInternal,
+    TrustedDomainInformationEx2Internal,
+    TrustedDomainFullInformation2Internal,
+    TrustedDomainSupportedEncryptionTypes
   } TRUSTED_INFORMATION_CLASS,*PTRUSTED_INFORMATION_CLASS;
 
   typedef struct _TRUSTED_DOMAIN_NAME_INFO {
@@ -456,7 +945,20 @@
 #define TRUST_ATTRIBUTE_CROSS_ORGANIZATION 0x00000010
 #define TRUST_ATTRIBUTE_WITHIN_FOREST 0x00000020
 #define TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL 0x00000040
+
+#if _WIN32_WINNT >= 0x0600
 #define TRUST_ATTRIBUTE_TRUST_USES_RC4_ENCRYPTION 0x00000080
+#define TRUST_ATTRIBUTE_TRUST_USES_AES_KEYS 0x00000100
+#endif
+
+#if _WIN32_WINNT >= 0x0602
+#define TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION 0x00000200
+#define TRUST_ATTRIBUTE_PIM_TRUST 0x00000400
+#endif
+
+#if _WIN32_WINNT >= 0x0603
+#define TRUST_ATTRIBUTE_CROSS_ORGANIZATION_ENABLE_TGT_DELEGATION 0x00000800
+#endif
 
 #define TRUST_ATTRIBUTES_VALID 0xFF03FFFF
 #define TRUST_ATTRIBUTES_USER 0xFF000000
@@ -514,6 +1016,10 @@
     TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
   } TRUSTED_DOMAIN_FULL_INFORMATION2,*PTRUSTED_DOMAIN_FULL_INFORMATION2;
 
+  typedef struct _TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
+    ULONG SupportedEncryptionTypes;
+  } TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES,*PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES;
+
   typedef enum {
     ForestTrustTopLevelName,ForestTrustTopLevelNameEx,ForestTrustDomainInfo,ForestTrustRecordTypeLast = ForestTrustDomainInfo
   } LSA_FOREST_TRUST_RECORD_TYPE;
@@ -592,7 +1098,7 @@
     ULONG FailedAttemptCountSinceLastSuccessfulLogon;
   } LSA_LAST_INTER_LOGON_INFO,*PLSA_LAST_INTER_LOGON_INFO;
   #endif
-  
+
   typedef struct _SECURITY_LOGON_SESSION_DATA {
     ULONG Size;
     LUID LogonId;
@@ -634,6 +1140,52 @@
   NTSTATUS NTAPI LsaLookupNames(LSA_HANDLE PolicyHandle,ULONG Count,PLSA_UNICODE_STRING Names,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_SID *Sids);
   NTSTATUS NTAPI LsaLookupNames2(LSA_HANDLE PolicyHandle,ULONG Flags,ULONG Count,PLSA_UNICODE_STRING Names,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_SID2 *Sids);
   NTSTATUS NTAPI LsaLookupSids(LSA_HANDLE PolicyHandle,ULONG Count,PSID *Sids,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_NAME *Names);
+  NTSTATUS NTAPI LsaLookupSids2(LSA_HANDLE PolicyHandle,ULONG LookupOptions,ULONG Count,PSID *Sids,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_NAME *Names);
+  NTSTATUS NTAPI LsaSetCAPs(PLSA_UNICODE_STRING CAPDNs,ULONG CAPDNCount,ULONG Flags);
+  NTSTATUS NTAPI LsaGetAppliedCAPIDs(PLSA_UNICODE_STRING SystemName,PSID **CAPIDs,PULONG CAPIDCount);
+
+  #define MAXIMUM_CAPES_PER_CAP 0x7f
+
+  #define CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG 0x00000001
+  #define CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG 0x00000100
+  #define CENTRAL_ACCESS_POLICY_STAGED_FLAG 0x00010000
+  #define STAGING_FLAG(Effective) ((Effective & 0xf) << 8)
+
+  #define CENTRAL_ACCESS_POLICY_VALID_FLAG_MASK (CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG | \
+                                                 CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG  | \
+                                                 CENTRAL_ACCESS_POLICY_STAGED_FLAG)
+
+  #define LSASETCAPS_RELOAD_FLAG 0x00000001
+  #define LSASETCAPS_VALID_FLAG_MASK LSASETCAPS_RELOAD_FLAG
+
+  typedef struct _CENTRAL_ACCESS_POLICY_ENTRY {
+    LSA_UNICODE_STRING Name;
+    LSA_UNICODE_STRING Description;
+    LSA_UNICODE_STRING ChangeId;
+    ULONG LengthAppliesTo;
+    PUCHAR AppliesTo;
+    ULONG LengthSD;
+    PSECURITY_DESCRIPTOR SD;
+    ULONG LengthStagedSD;
+    PSECURITY_DESCRIPTOR StagedSD;
+    ULONG Flags;
+  } CENTRAL_ACCESS_POLICY_ENTRY, *PCENTRAL_ACCESS_POLICY_ENTRY;
+
+  typedef const CENTRAL_ACCESS_POLICY_ENTRY *PCCENTRAL_ACCESS_POLICY_ENTRY;
+
+  typedef struct _CENTRAL_ACCESS_POLICY {
+    PSID CAPID;
+    LSA_UNICODE_STRING Name;
+    LSA_UNICODE_STRING Description;
+    LSA_UNICODE_STRING ChangeId;
+    ULONG Flags;
+    ULONG CAPECount;
+    PCENTRAL_ACCESS_POLICY_ENTRY *CAPEs;
+  } CENTRAL_ACCESS_POLICY, *PCENTRAL_ACCESS_POLICY;
+
+  typedef const CENTRAL_ACCESS_POLICY *PCCENTRAL_ACCESS_POLICY;
+
+  NTSTATUS NTAPI LsaQueryCAPs(PSID *CAPIDs,ULONG CAPIDCount,PCENTRAL_ACCESS_POLICY *CAPs,PULONG CAPCount);
 
 #define SE_INTERACTIVE_LOGON_NAME TEXT("SeInteractiveLogonRight")
 #define SE_NETWORK_LOGON_NAME TEXT("SeNetworkLogonRight")
@@ -674,7 +1226,11 @@
 #endif
 
   enum NEGOTIATE_MESSAGES {
-    NegEnumPackagePrefixes = 0,NegGetCallerName = 1,NegCallPackageMax
+    NegEnumPackagePrefixes = 0,
+    NegGetCallerName = 1,
+    NegTransferCredentials = 2,
+    NegMsgReserved1 = 3,
+    NegCallPackageMax
   };
 
 #define NEGOTIATE_MAX_PREFIX 32
@@ -733,6 +1289,10 @@
 #define DOMAIN_PASSWORD_STORE_CLEARTEXT __MSABI_LONG(0x00000010)
 #define DOMAIN_REFUSE_PASSWORD_CHANGE __MSABI_LONG(0x00000020)
 
+#if _WIN32_WINNT >= 0x0502
+#define DOMAIN_NO_LM_OWF_CHANGE __MSABI_LONG(0x00000040)
+#endif
+
 #ifndef _PASSWORD_NOTIFICATION_DEFINED
 #define _PASSWORD_NOTIFICATION_DEFINED
   typedef NTSTATUS (*PSAM_PASSWORD_NOTIFICATION_ROUTINE)(PUNICODE_STRING UserName,ULONG RelativeId,PUNICODE_STRING NewPassword);
@@ -755,7 +1315,15 @@
 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
 
   typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
-    MsV1_0InteractiveLogon = 2,MsV1_0Lm20Logon,MsV1_0NetworkLogon,MsV1_0SubAuthLogon,MsV1_0WorkstationUnlockLogon = 7
+    MsV1_0InteractiveLogon = 2,
+    MsV1_0Lm20Logon,
+    MsV1_0NetworkLogon,
+    MsV1_0SubAuthLogon,
+    MsV1_0WorkstationUnlockLogon = 7,
+    MsV1_0S4ULogon = 12,
+    MsV1_0VirtualLogon = 82,
+    MsV1_0NoElevationLogon,
+    MsV1_0LuidLogon
   } MSV1_0_LOGON_SUBMIT_TYPE,*PMSV1_0_LOGON_SUBMIT_TYPE;
 
   typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
@@ -811,6 +1379,15 @@
 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
 
+#if _WIN32_WINNT >= 0x0600
+#define MSV1_0_S4U2SELF 0x00020000
+#define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
+#endif
+
+#if _WIN32_WINNT >= 0x0602
+#define MSV1_0_INTERNET_DOMAIN 0x00080000
+#endif
+
 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
 #define MSV1_0_MNS_LOGON 0x01000000
@@ -841,6 +1418,19 @@
     ULONG SubAuthPackageId;
   } MSV1_0_SUBAUTH_LOGON,*PMSV1_0_SUBAUTH_LOGON;
 
+#if _WIN32_WINNT >= 0x0600
+
+#define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
+
+  typedef struct _MSV1_0_S4U_LOGON {
+    MSV1_0_LOGON_SUBMIT_TYPE MessageType;
+    ULONG Flags;
+    UNICODE_STRING UserPrincipalName;
+    UNICODE_STRING DomainName;
+  } MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON;
+
+#endif
+
 #define LOGON_GUEST 0x01
 #define LOGON_NOENCRYPTION 0x02
 #define LOGON_CACHED_ACCOUNT 0x04
@@ -851,6 +1441,21 @@
 #define LOGON_NTLMV2_ENABLED 0x100
 #define LOGON_RESOURCE_GROUPS 0x200
 #define LOGON_PROFILE_PATH_RETURNED 0x400
+#define LOGON_NT_V2 0x800
+#define LOGON_LM_V2 0x1000
+#define LOGON_NTLM_V2 0x2000
+
+#if _WIN32_WINNT >= 0x0600
+#define LOGON_OPTIMIZED 0x4000
+#define LOGON_WINLOGON 0x8000
+#define LOGON_PKINIT 0x10000
+#define LOGON_NO_OPTIMIZED 0x20000
+#endif
+
+#if _WIN32_WINNT >= 0x0602
+#define LOGON_NO_ELEVATION 0x40000
+#define LOGON_MANAGED_SERVICE 0x80000
+#endif
 
 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
 
@@ -869,9 +1474,34 @@
   } MSV1_0_LM20_LOGON_PROFILE,*PMSV1_0_LM20_LOGON_PROFILE;
 
 #define MSV1_0_OWF_PASSWORD_LENGTH 16
+#define MSV1_0_SHA_PASSWORD_LENGTH 20
+#define MSV1_0_CREDENTIAL_KEY_LENGTH 20
 #define MSV1_0_CRED_LM_PRESENT 0x1
 #define MSV1_0_CRED_NT_PRESENT 0x2
+#define MSV1_0_CRED_REMOVED 0x4
+#define MSV1_0_CRED_CREDKEY_PRESENT 0x8
+#define MSV1_0_CRED_SHA_PRESENT 0x10
+
 #define MSV1_0_CRED_VERSION 0
+#define MSV1_0_CRED_VERSION_V2 2
+#define MSV1_0_CRED_VERSION_V3 4
+#define MSV1_0_CRED_VERSION_IUM 0xffff0001
+#define MSV1_0_CRED_VERSION_REMOTE 0xffff0002
+#define MSV1_0_CRED_VERSION_ARSO 0xffff0003
+#define MSV1_0_CRED_VERSION_RESERVED_1 0xfffffffe
+#define MSV1_0_CRED_VERSION_INVALID 0xffffffff
+
+  typedef enum _MSV1_0_CREDENTIAL_KEY_TYPE {
+    InvalidCredKey,
+    DeprecatedIUMCredKey,
+    DomainUserCredKey,
+    LocalUserCredKey,
+    ExternallySuppliedCredKey
+  } MSV1_0_CREDENTIAL_KEY_TYPE;
+
+  typedef struct _MSV1_0_CREDENTIAL_KEY {
+    UCHAR Data[MSV1_0_CREDENTIAL_KEY_LENGTH];
+  } MSV1_0_CREDENTIAL_KEY, *PMSV1_0_CREDENTIAL_KEY;
 
   typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
     ULONG Version;
@@ -880,6 +1510,40 @@
     UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
   } MSV1_0_SUPPLEMENTAL_CREDENTIAL,*PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
 
+  typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL_V2 {
+    ULONG Version;
+    ULONG Flags;
+    UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
+    MSV1_0_CREDENTIAL_KEY CredentialKey;
+  } MSV1_0_SUPPLEMENTAL_CREDENTIAL_V2, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL_V2;
+
+  typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL_V3 {
+    ULONG Version;
+    ULONG Flags;
+    MSV1_0_CREDENTIAL_KEY_TYPE CredentialKeyType;
+    UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
+    MSV1_0_CREDENTIAL_KEY CredentialKey;
+    UCHAR ShaPassword[MSV1_0_SHA_PASSWORD_LENGTH];
+  } MSV1_0_SUPPLEMENTAL_CREDENTIAL_V3, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL_V3;
+
+  typedef struct _MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL {
+    ULONG Version;
+    ULONG EncryptedCredsSize;
+    UCHAR EncryptedCreds[1];
+  } MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL;
+
+#define MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL_SIZE(Creds) \
+  (FIELD_OFFSET(MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL, EncryptedCreds) + (Creds)->EncryptedCredsSize)
+
+  typedef struct _MSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL {
+    ULONG Version;
+    ULONG Flags;
+    MSV1_0_CREDENTIAL_KEY CredentialKey;
+    MSV1_0_CREDENTIAL_KEY_TYPE CredentialKeyType;
+    ULONG EncryptedCredsSize;
+    UCHAR EncryptedCreds[1];
+  } MSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL;
+
 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
 #define MSV1_0_NTLM3_OWF_LENGTH 16
 
@@ -888,6 +1552,14 @@
 
 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
 
+#if _WIN32_WINNT >= 0x0600
+#define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
+#endif
+
+#if _WIN32_WINNT >= 0x0601
+#define MSV1_0_AV_FLAG_UNVERIFIED_TARGET 0x00000004
+#endif
+
   typedef struct _MSV1_0_NTLM3_RESPONSE {
     UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
     UCHAR RespType;
@@ -924,13 +1596,44 @@
   typedef struct _MSV1_0_AV_PAIR {
     USHORT AvId;
     USHORT AvLen;
-
   } MSV1_0_AV_PAIR,*PMSV1_0_AV_PAIR;
 
   typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE {
-    MsV1_0Lm20ChallengeRequest = 0,MsV1_0Lm20GetChallengeResponse,MsV1_0EnumerateUsers,MsV1_0GetUserInfo,MsV1_0ReLogonUsers,MsV1_0ChangePassword,
-    MsV1_0ChangeCachedPassword,MsV1_0GenericPassthrough,MsV1_0CacheLogon,MsV1_0SubAuth,MsV1_0DeriveCredential,MsV1_0CacheLookup,
-    MsV1_0SetProcessOption
+    MsV1_0Lm20ChallengeRequest = 0,
+    MsV1_0Lm20GetChallengeResponse,
+    MsV1_0EnumerateUsers,
+    MsV1_0GetUserInfo,
+    MsV1_0ReLogonUsers,
+    MsV1_0ChangePassword,
+    MsV1_0ChangeCachedPassword,
+    MsV1_0GenericPassthrough,
+    MsV1_0CacheLogon,
+    MsV1_0SubAuth,
+    MsV1_0DeriveCredential,
+    MsV1_0CacheLookup,
+#if _WIN32_WINNT >= 0x0501
+    MsV1_0SetProcessOption,
+#endif
+#if _WIN32_WINNT >= 0x0600
+    MsV1_0ConfigLocalAliases,
+    MsV1_0ClearCachedCredentials,
+#endif
+#if _WIN32_WINNT >= 0x0601
+    MsV1_0LookupToken,
+#endif
+#if _WIN32_WINNT >= 0x0602
+    MsV1_0ValidateAuth,
+    MsV1_0CacheLookupEx,
+    MsV1_0GetCredentialKey,
+    MsV1_0SetThreadOption,
+#endif
+#if _WIN32_WINNT >= 0x0A00
+    MsV1_0DecryptDpapiMasterKey,
+    MsV1_0GetStrongCredentialKey,
+    MsV1_0TransferCred,
+    MsV1_0ProvisionTbal,
+    MsV1_0DeleteTbalSecrets
+#endif
   } MSV1_0_PROTOCOL_MESSAGE_TYPE,*PMSV1_0_PROTOCOL_MESSAGE_TYPE;
 
   typedef struct _MSV1_0_CHANGEPASSWORD_REQUEST {
@@ -986,6 +1689,7 @@
 #define RTL_ENCRYPT_MEMORY_SIZE 8
 #define RTL_ENCRYPT_OPTION_CROSS_PROCESS 0x01
 #define RTL_ENCRYPT_OPTION_SAME_LOGON 0x02
+#define RTL_ENCRYPT_OPTION_FOR_SYSTEM 0x04
 
   NTSTATUS WINAPI RtlEncryptMemory(PVOID Memory,ULONG MemorySize,ULONG OptionFlags);
   NTSTATUS WINAPI RtlDecryptMemory(PVOID Memory,ULONG MemorySize,ULONG OptionFlags);
@@ -997,6 +1701,8 @@
 #define KERB_ETYPE_DES_CBC_CRC 1
 #define KERB_ETYPE_DES_CBC_MD4 2
 #define KERB_ETYPE_DES_CBC_MD5 3
+#define KERB_ETYPE_AES128_CTS_HMAC_SHA1_96 17
+#define KERB_ETYPE_AES256_CTS_HMAC_SHA1_96 18
 
 #define KERB_ETYPE_RC4_MD4 -128
 #define KERB_ETYPE_RC4_PLAIN2 -129
@@ -1009,6 +1715,8 @@
 #define KERB_ETYPE_RC4_PLAIN_OLD_EXP -136
 #define KERB_ETYPE_RC4_PLAIN -140
 #define KERB_ETYPE_RC4_PLAIN_EXP -141
+#define KERB_ETYPE_AES128_CTS_HMAC_SHA1_96_PLAIN -148
+#define KERB_ETYPE_AES256_CTS_HMAC_SHA1_96_PLAIN -149
 
 #define KERB_ETYPE_DSA_SHA1_CMS 9
 #define KERB_ETYPE_RSA_MD5_CMS 10
@@ -1040,6 +1748,9 @@
 #define KERB_CHECKSUM_KRB_DES_MAC_K 5
 #define KERB_CHECKSUM_MD5 7
 #define KERB_CHECKSUM_MD5_DES 8
+#define KERB_CHECKSUM_SHA1_NEW 14
+#define KERB_CHECKSUM_HMAC_SHA1_96_AES128 15
+#define KERB_CHECKSUM_HMAC_SHA1_96_AES256 16
 
 #define KERB_CHECKSUM_LM -130
 #define KERB_CHECKSUM_SHA1 -131
@@ -1050,6 +1761,8 @@
 #define KERB_CHECKSUM_RC4_MD5 -136
 #define KERB_CHECKSUM_MD5_HMAC -137
 #define KERB_CHECKSUM_HMAC_MD5 -138
+#define KERB_CHECKSUM_HMAC_SHA1_96_AES128_Ki -150
+#define KERB_CHECKSUM_HMAC_SHA1_96_AES256_Ki -151
 
 #define AUTH_REQ_ALLOW_FORWARDABLE 0x00000001
 #define AUTH_REQ_ALLOW_PROXIABLE 0x00000002
@@ -1080,6 +1793,10 @@
 #define KERB_TICKET_FLAGS_hw_authent 0x00100000
 #define KERB_TICKET_FLAGS_ok_as_delegate 0x00040000
 #define KERB_TICKET_FLAGS_name_canonicalize 0x00010000
+#if _WIN32_WINNT == 0x0501
+#define KERB_TICKET_FLAGS_cname_in_pa_data 0x00040000
+#endif
+#define KERB_TICKET_FLAGS_enc_pa_rep 0x00010000
 #define KERB_TICKET_FLAGS_reserved1 0x00000001
 
 #define KRB_NT_UNKNOWN 0
@@ -1091,12 +1808,21 @@
 #define KRB_NT_SRV_XHST 4
 #define KRB_NT_UID 5
 #define KRB_NT_ENTERPRISE_PRINCIPAL 10
+#define KRB_NT_WELLKNOWN 11
+#define KRB_NT_MS_BRANCH_ID -133
 #define KRB_NT_ENT_PRINCIPAL_AND_ID -130
 #define KRB_NT_MS_PRINCIPAL -128
 #define KRB_NT_MS_PRINCIPAL_AND_ID -129
 
 #define KERB_IS_MS_PRINCIPAL(_x_) (((_x_) <= KRB_NT_MS_PRINCIPAL) || ((_x_) >= KRB_NT_ENTERPRISE_PRINCIPAL))
 
+#if _WIN32_WINNT >= 0x0600
+#define KRB_NT_X500_PRINCIPAL 6
+#endif
+
+#define KRB_WELLKNOWN_STRING L"WELLKNOWN"
+#define KRB_ANONYMOUS_STRING L"ANONYMOUS"
+
 #ifndef MICROSOFT_KERBEROS_NAME_A
 
 #define MICROSOFT_KERBEROS_NAME_A "Kerberos"
@@ -1111,12 +1837,22 @@
 #define KERB_WRAP_NO_ENCRYPT 0x80000001
 
   typedef enum _KERB_LOGON_SUBMIT_TYPE {
-    KerbInteractiveLogon = 2,KerbSmartCardLogon = 6,KerbWorkstationUnlockLogon = 7,KerbSmartCardUnlockLogon = 8,KerbProxyLogon = 9,
-    KerbTicketLogon = 10,KerbTicketUnlockLogon = 11,KerbS4ULogon = 12
+    KerbInteractiveLogon = 2,
+    KerbSmartCardLogon = 6,
+    KerbWorkstationUnlockLogon = 7,
+    KerbSmartCardUnlockLogon = 8,
+    KerbProxyLogon = 9,
+    KerbTicketLogon = 10,
+    KerbTicketUnlockLogon = 11,
+    KerbS4ULogon = 12,
 #if (_WIN32_WINNT >= 0x0600)
-   ,KerbCertificateLogon         = 13,
-    KerbCertificateS4ULogon      = 14,
-    KerbCertificateUnlockLogon   = 15 
+    KerbCertificateLogon = 13,
+    KerbCertificateS4ULogon = 14,
+    KerbCertificateUnlockLogon = 15,
+#endif
+#if (_WIN32_WINNT >= 0x0602)
+    KerbNoElevationLogon = 83,
+    KerbLuidLogon = 84
 #endif
   } KERB_LOGON_SUBMIT_TYPE,*PKERB_LOGON_SUBMIT_TYPE;
 
@@ -1154,12 +1890,18 @@
   } KERB_TICKET_LOGON,*PKERB_TICKET_LOGON;
 
 #define KERB_LOGON_FLAG_ALLOW_EXPIRED_TICKET 0x1
+#define KERB_LOGON_FLAG_REDIRECTED 0x2
 
   typedef struct _KERB_TICKET_UNLOCK_LOGON {
     KERB_TICKET_LOGON Logon;
     LUID LogonId;
   } KERB_TICKET_UNLOCK_LOGON,*PKERB_TICKET_UNLOCK_LOGON;
 
+#if _WIN32_WINNT >= 0x0600
+#define KERB_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
+#define KERB_S4U_LOGON_FLAG_IDENTIFY 0x8
+#endif
+
   typedef struct _KERB_S4U_LOGON {
     KERB_LOGON_SUBMIT_TYPE MessageType;
     ULONG Flags;
@@ -1202,17 +1944,63 @@
     PUCHAR Value;
   } KERB_CRYPTO_KEY,*PKERB_CRYPTO_KEY;
 
+  typedef struct KERB_CRYPTO_KEY32 {
+    LONG KeyType;
+    ULONG Length;
+    ULONG Offset;
+  } KERB_CRYPTO_KEY32,*PKERB_CRYPTO_KEY32;
+
   typedef struct _KERB_TICKET_PROFILE {
     KERB_INTERACTIVE_PROFILE Profile;
     KERB_CRYPTO_KEY SessionKey;
   } KERB_TICKET_PROFILE,*PKERB_TICKET_PROFILE;
 
   typedef enum _KERB_PROTOCOL_MESSAGE_TYPE {
-    KerbDebugRequestMessage = 0,KerbQueryTicketCacheMessage,KerbChangeMachinePasswordMessage,KerbVerifyPacMessage,KerbRetrieveTicketMessage,
-    KerbUpdateAddressesMessage,KerbPurgeTicketCacheMessage,KerbChangePasswordMessage,KerbRetrieveEncodedTicketMessage,KerbDecryptDataMessage,
-    KerbAddBindingCacheEntryMessage,KerbSetPasswordMessage,KerbSetPasswordExMessage,KerbVerifyCredentialsMessage,KerbQueryTicketCacheExMessage,
-    KerbPurgeTicketCacheExMessage,KerbRefreshSmartcardCredentialsMessage,KerbAddExtraCredentialsMessage,KerbQuerySupplementalCredentialsMessage,
-    KerbTransferCredentialsMessage,KerbQueryTicketCacheEx2Message
+    KerbDebugRequestMessage = 0,
+    KerbQueryTicketCacheMessage,
+    KerbChangeMachinePasswordMessage,
+    KerbVerifyPacMessage,
+    KerbRetrieveTicketMessage,
+    KerbUpdateAddressesMessage,
+    KerbPurgeTicketCacheMessage,
+    KerbChangePasswordMessage,
+    KerbRetrieveEncodedTicketMessage,
+    KerbDecryptDataMessage,
+    KerbAddBindingCacheEntryMessage,
+    KerbSetPasswordMessage,
+    KerbSetPasswordExMessage,
+#if _WIN32_WINNT >= 0x0501
+    KerbVerifyCredentialsMessage,
+    KerbQueryTicketCacheExMessage,
+    KerbPurgeTicketCacheExMessage,
+#endif
+#if _WIN32_WINNT >= 0x0502
+    KerbRefreshSmartcardCredentialsMessage,
+    KerbAddExtraCredentialsMessage,
+    KerbQuerySupplementalCredentialsMessage,
+#endif
+#if _WIN32_WINNT >= 0x0600
+    KerbTransferCredentialsMessage,
+    KerbQueryTicketCacheEx2Message,
+    KerbSubmitTicketMessage,
+    KerbAddExtraCredentialsExMessage,
+#endif
+#if _WIN32_WINNT >= 0x0602
+    KerbQueryKdcProxyCacheMessage,
+    KerbPurgeKdcProxyCacheMessage,
+    KerbQueryTicketCacheEx3Message,
+    KerbCleanupMachinePkinitCredsMessage,
+    KerbAddBindingCacheEntryExMessage,
+    KerbQueryBindingCacheMessage,
+    KerbPurgeBindingCacheMessage,
+    KerbPinKdcMessage,
+    KerbUnpinAllKdcsMessage,
+    KerbQueryDomainExtendedPoliciesMessage,
+    KerbQueryS4U2ProxyCacheMessage,
+#endif
+#if _WIN32_WINNT >= 0x0A00
+    KerbRetrieveKeyTabMessage
+#endif
   } KERB_PROTOCOL_MESSAGE_TYPE,*PKERB_PROTOCOL_MESSAGE_TYPE;
 
   typedef struct _KERB_QUERY_TKT_CACHE_REQUEST {
@@ -1255,6 +2043,24 @@
     ULONG SessionKeyType;
   } KERB_TICKET_CACHE_INFO_EX2,*PKERB_TICKET_CACHE_INFO_EX2;
 
+#if _WIN32_WINNT >= 0x0602
+  typedef struct _KERB_TICKET_CACHE_INFO_EX3 {
+    UNICODE_STRING ClientName;
+    UNICODE_STRING ClientRealm;
+    UNICODE_STRING ServerName;
+    UNICODE_STRING ServerRealm;
+    LARGE_INTEGER StartTime;
+    LARGE_INTEGER EndTime;
+    LARGE_INTEGER RenewTime;
+    LONG EncryptionType;
+    ULONG TicketFlags;
+    ULONG SessionKeyType;
+    ULONG BranchId;
+    ULONG CacheFlags;
+    UNICODE_STRING KdcCalled;
+  } KERB_TICKET_CACHE_INFO_EX3, *PKERB_TICKET_CACHE_INFO_EX3;
+#endif
+
   typedef struct _KERB_QUERY_TKT_CACHE_RESPONSE {
     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
     ULONG CountOfTickets;
@@ -1273,6 +2079,14 @@
     KERB_TICKET_CACHE_INFO_EX2 Tickets[ANYSIZE_ARRAY];
   } KERB_QUERY_TKT_CACHE_EX2_RESPONSE,*PKERB_QUERY_TKT_CACHE_EX2_RESPONSE;
 
+#if _WIN32_WINNT >= 0x0602
+  typedef struct _KERB_QUERY_TKT_CACHE_EX3_RESPONSE {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG CountOfTickets;
+    KERB_TICKET_CACHE_INFO_EX3 Tickets[ANYSIZE_ARRAY];
+  } KERB_QUERY_TKT_CACHE_EX3_RESPONSE, *PKERB_QUERY_TKT_CACHE_EX3_RESPONSE;
+#endif
+
 #ifndef __SECHANDLE_DEFINED__
   typedef struct _SecHandle {
     ULONG_PTR dwLower;
@@ -1290,7 +2104,14 @@
 #define KERB_RETRIEVE_TICKET_USE_CREDHANDLE 0x4
 #define KERB_RETRIEVE_TICKET_AS_KERB_CRED 0x8
 #define KERB_RETRIEVE_TICKET_WITH_SEC_CRED 0x10
+
+#if _WIN32_WINNT >= 0x0600
 #define KERB_RETRIEVE_TICKET_CACHE_TICKET 0x20
+#endif
+
+#if _WIN32_WINNT >= 0x0601
+#define KERB_RETRIEVE_TICKET_MAX_LIFETIME 0x40
+#endif
 
 #define KERB_ETYPE_DEFAULT 0x0
 
@@ -1366,6 +2187,105 @@
     KERB_TICKET_CACHE_INFO_EX TicketTemplate;
   } KERB_PURGE_TKT_CACHE_EX_REQUEST,*PKERB_PURGE_TKT_CACHE_EX_REQUEST;
 
+  typedef struct _KERB_SUBMIT_TKT_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    LUID LogonId;
+    ULONG Flags;
+    KERB_CRYPTO_KEY32 Key;
+    ULONG KerbCredSize;
+    ULONG KerbCredOffset;
+  } KERB_SUBMIT_TKT_REQUEST, *PKERB_SUBMIT_TKT_REQUEST;
+
+#if _WIN32_WINNT >= 0x0602
+
+  typedef struct _KERB_QUERY_KDC_PROXY_CACHE_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG Flags;
+    LUID LogonId;
+  } KERB_QUERY_KDC_PROXY_CACHE_REQUEST, *PKERB_QUERY_KDC_PROXY_CACHE_REQUEST;
+
+  typedef struct _KDC_PROXY_CACHE_ENTRY_DATA {
+    ULONG64 SinceLastUsed;
+    UNICODE_STRING DomainName;
+    UNICODE_STRING ProxyServerName;
+    UNICODE_STRING ProxyServerVdir;
+    USHORT ProxyServerPort;
+    LUID LogonId;
+    UNICODE_STRING CredUserName;
+    UNICODE_STRING CredDomainName;
+    BOOLEAN GlobalCache;
+  } KDC_PROXY_CACHE_ENTRY_DATA, *PKDC_PROXY_CACHE_ENTRY_DATA;
+
+  typedef struct _KERB_QUERY_KDC_PROXY_CACHE_RESPONSE {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG CountOfEntries;
+    PKDC_PROXY_CACHE_ENTRY_DATA Entries;
+  } KERB_QUERY_KDC_PROXY_CACHE_RESPONSE, *PKERB_QUERY_KDC_PROXY_CACHE_RESPONSE;
+
+  typedef struct _KERB_PURGE_KDC_PROXY_CACHE_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG Flags;
+    LUID LogonId;
+  } KERB_PURGE_KDC_PROXY_CACHE_REQUEST, *PKERB_PURGE_KDC_PROXY_CACHE_REQUEST;
+
+  typedef struct _KERB_PURGE_KDC_PROXY_CACHE_RESPONSE {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG CountOfPurged;
+  } KERB_PURGE_KDC_PROXY_CACHE_RESPONSE, *PKERB_PURGE_KDC_PROXY_CACHE_RESPONSE;
+
+#define KERB_S4U2PROXY_CACHE_ENTRY_INFO_FLAG_NEGATIVE 0x1
+
+  typedef struct _KERB_S4U2PROXY_CACHE_ENTRY_INFO {
+    UNICODE_STRING ServerName;
+    ULONG Flags;
+    NTSTATUS LastStatus;
+    LARGE_INTEGER  Expiry;
+  } KERB_S4U2PROXY_CACHE_ENTRY_INFO, *PKERB_S4U2PROXY_CACHE_ENTRY_INFO;
+
+#define KERB_S4U2PROXY_CRED_FLAG_NEGATIVE 0x1
+
+  typedef struct _KERB_S4U2PROXY_CRED {
+    UNICODE_STRING UserName;
+    UNICODE_STRING DomainName;
+    ULONG Flags;
+    NTSTATUS LastStatus;
+    LARGE_INTEGER Expiry;
+    ULONG CountOfEntries;
+    PKERB_S4U2PROXY_CACHE_ENTRY_INFO Entries;
+  } KERB_S4U2PROXY_CRED, *PKERB_S4U2PROXY_CRED;
+
+  typedef struct _KERB_QUERY_S4U2PROXY_CACHE_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG Flags;
+    LUID LogonId;
+  } KERB_QUERY_S4U2PROXY_CACHE_REQUEST, *PKERB_QUERY_S4U2PROXY_CACHE_REQUEST;
+
+  typedef struct _KERB_QUERY_S4U2PROXY_CACHE_RESPONSE {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG CountOfCreds;
+    PKERB_S4U2PROXY_CRED Creds;
+  } KERB_QUERY_S4U2PROXY_CACHE_RESPONSE, *PKERB_QUERY_S4U2PROXY_CACHE_RESPONSE;
+
+#endif
+
+#if _WIN32_WINNT >= 0x0A00
+
+  typedef struct _KERB_RETRIEVE_KEY_TAB_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG Flags;
+    UNICODE_STRING UserName;
+    UNICODE_STRING DomainName;
+    UNICODE_STRING Password;
+  } KERB_RETRIEVE_KEY_TAB_REQUEST, *PKERB_RETRIEVE_KEY_TAB_REQUEST;
+
+  typedef struct _KERB_RETRIEVE_KEY_TAB_RESPONSE {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG KeyTabLength;
+    PUCHAR KeyTab;
+  } KERB_RETRIEVE_KEY_TAB_RESPONSE, *PKERB_RETRIEVE_KEY_TAB_RESPONSE;
+
+#endif
+
   typedef struct _KERB_CHANGEPASSWORD_REQUEST {
     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
     UNICODE_STRING DomainName;
@@ -1453,6 +2373,16 @@
 #define KERB_REQUEST_REPLACE_CREDENTIAL 2
 #define KERB_REQUEST_REMOVE_CREDENTIAL 4
 
+#if _WIN32_WINNT >= 0x0600
+
+  typedef struct _KERB_ADD_CREDENTIALS_REQUEST_EX {
+    KERB_ADD_CREDENTIALS_REQUEST Credentials;
+    ULONG PrincipalNameCount;
+    UNICODE_STRING PrincipalNames[1];
+  } KERB_ADD_CREDENTIALS_REQUEST_EX, *PKERB_ADD_CREDENTIALS_REQUEST_EX;
+
+#endif
+
   typedef struct _KERB_TRANSFER_CRED_REQUEST {
     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
     LUID OriginLogonId;
@@ -1460,7 +2390,79 @@
     ULONG Flags;
   } KERB_TRANSFER_CRED_REQUEST,*PKERB_TRANSFER_CRED_REQUEST;
 
-#if (_WIN32_WINNT >= 0x0600)
+#define KERB_TRANSFER_CRED_WITH_TICKETS 1
+#define KERB_TRANSFER_CRED_CLEANUP_CREDENTIALS 2
+
+#if _WIN32_WINNT >= 0x0602
+
+  typedef struct _KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    LUID LogonId;
+  } KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST, *PKERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST;
+
+  typedef struct _KERB_BINDING_CACHE_ENTRY_DATA {
+    ULONG64 DiscoveryTime;
+    UNICODE_STRING RealmName;
+    UNICODE_STRING KdcAddress;
+    ULONG AddressType;
+    ULONG Flags;
+    ULONG DcFlags;
+    ULONG CacheFlags;
+    UNICODE_STRING KdcName;
+  } KERB_BINDING_CACHE_ENTRY_DATA, *PKERB_BINDING_CACHE_ENTRY_DATA;
+
+  typedef struct _KERB_QUERY_BINDING_CACHE_RESPONSE {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG CountOfEntries;
+    PKERB_BINDING_CACHE_ENTRY_DATA Entries;
+  } KERB_QUERY_BINDING_CACHE_RESPONSE, *PKERB_QUERY_BINDING_CACHE_RESPONSE;
+
+  typedef struct _KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    UNICODE_STRING RealmName;
+    UNICODE_STRING KdcAddress;
+    ULONG AddressType;
+    ULONG DcFlags;
+  } KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST, *PKERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST;
+
+  typedef struct _KERB_QUERY_BINDING_CACHE_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+  } KERB_QUERY_BINDING_CACHE_REQUEST, *PKERB_QUERY_BINDING_CACHE_REQUEST;
+
+  typedef struct _KERB_PURGE_BINDING_CACHE_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+  } KERB_PURGE_BINDING_CACHE_REQUEST, *PKERB_PURGE_BINDING_CACHE_REQUEST;
+
+  typedef struct _KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG Flags;
+    UNICODE_STRING DomainName;
+  } KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST, *PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST;
+
+#define KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE_FLAG_DAC_DISABLED 1
+
+  typedef struct _KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE {
+    KERB_PROTOCOL_MESSAGE_TYPE MessageType;
+    ULONG Flags;
+    ULONG ExtendedPolicies;
+    ULONG DsFlags;
+  } KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE, *PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE;
+
+  typedef enum _KERB_CERTIFICATE_INFO_TYPE {
+    CertHashInfo = 1,
+  } KERB_CERTIFICATE_INFO_TYPE, *PKERB_CERTIFICATE_INFO_TYPE;
+
+  typedef struct _KERB_CERTIFICATE_HASHINFO {
+    USHORT StoreNameLength;
+    USHORT HashLength;
+  } KERB_CERTIFICATE_HASHINFO, *PKERB_CERTIFICATE_HASHINFO;
+
+  typedef struct _KERB_CERTIFICATE_INFO {
+    ULONG CertInfoSize;
+    ULONG InfoType;
+  } KERB_CERTIFICATE_INFO, *PKERB_CERTIFICATE_INFO;
+
+#endif
 
 #define PER_USER_POLICY_UNCHANGED 0x00
 #define PER_USER_AUDIT_SUCCESS_INCLUDE 0x01
@@ -1478,11 +2480,36 @@
   } AUDIT_POLICY_INFORMATION, *PAUDIT_POLICY_INFORMATION;
   typedef const PAUDIT_POLICY_INFORMATION PCAUDIT_POLICY_INFORMATION, LPCAUDIT_POLICY_INFORMATION;
 
+#define AUDIT_SET_SYSTEM_POLICY 0x0001
+#define AUDIT_QUERY_SYSTEM_POLICY 0x0002
+#define AUDIT_SET_USER_POLICY 0x0004
+#define AUDIT_QUERY_USER_POLICY 0x0008
+#define AUDIT_ENUMERATE_USERS 0x0010
+#define AUDIT_SET_MISC_POLICY 0x0020
+#define AUDIT_QUERY_MISC_POLICY 0x0040
+
+#define AUDIT_GENERIC_ALL (STANDARD_RIGHTS_REQUIRED | AUDIT_SET_SYSTEM_POLICY | AUDIT_QUERY_SYSTEM_POLICY | \
+                           AUDIT_SET_USER_POLICY | AUDIT_QUERY_USER_POLICY | AUDIT_ENUMERATE_USERS | \
+                           AUDIT_SET_MISC_POLICY | AUDIT_QUERY_MISC_POLICY)
+
+#define AUDIT_GENERIC_READ (STANDARD_RIGHTS_READ | AUDIT_QUERY_SYSTEM_POLICY | AUDIT_QUERY_USER_POLICY | \
+                            AUDIT_ENUMERATE_USERS | AUDIT_QUERY_MISC_POLICY)
+
+#define AUDIT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | AUDIT_SET_USER_POLICY | AUDIT_SET_MISC_POLICY | \
+                             AUDIT_SET_SYSTEM_POLICY)
+
+#define AUDIT_GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE
+
   typedef struct _POLICY_AUDIT_SID_ARRAY {
     ULONG UsersCount;
     PSID  *UserSidArray;
   } POLICY_AUDIT_SID_ARRAY, *PPOLICY_AUDIT_SID_ARRAY;
 
+#if _WIN32_WINNT >= 0x0600
+
+#define KERB_CERTIFICATE_LOGON_FLAG_CHECK_DUPLICATES 0x1
+#define KERB_CERTIFICATE_LOGON_FLAG_USE_CERTIFICATE_INFO 0x2
+
   typedef struct _KERB_CERTIFICATE_LOGON {
     KERB_LOGON_SUBMIT_TYPE MessageType;
     UNICODE_STRING         DomainName;
@@ -1498,6 +2525,20 @@
     LUID                   LogonId;
   } KERB_CERTIFICATE_UNLOCK_LOGON, *PKERB_CERTIFICATE_UNLOCK_LOGON;
 
+#define KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_DUPLICATES 0x1
+#define KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
+#define KERB_CERTIFICATE_S4U_LOGON_FLAG_FAIL_IF_NT_AUTH_POLICY_REQUIRED 0x4
+#define KERB_CERTIFICATE_S4U_LOGON_FLAG_IDENTIFY 0x8
+
+  typedef struct _KERB_CERTIFICATE_S4U_LOGON {
+    KERB_LOGON_SUBMIT_TYPE MessageType;
+    ULONG Flags;
+    UNICODE_STRING UserPrincipalName;
+    UNICODE_STRING DomainName;
+    ULONG CertificateLength;
+    PUCHAR Certificate;
+  } KERB_CERTIFICATE_S4U_LOGON, *PKERB_CERTIFICATE_S4U_LOGON;
+
   typedef struct _KERB_SMARTCARD_CSP_INFO {
     DWORD dwCspInfoLen;
     DWORD MessageType;
@@ -1514,6 +2555,8 @@
     TCHAR bBuffer;
   } KERB_SMARTCARD_CSP_INFO, *PKERB_SMARTCARD_CSP_INFO;
 
+#endif
+
   BOOLEAN WINAPI AuditComputeEffectivePolicyBySid(
     const PSID pSid,
     const GUID *pSubCategoryGuids,
@@ -1615,7 +2658,65 @@
     PSECURITY_DESCRIPTOR pSecurityDescriptor
   );
 
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+  BOOLEAN NTAPI AuditSetGlobalSaclW(
+    PCWSTR ObjectTypeName,
+    PACL Acl
+  );
+
+  BOOLEAN NTAPI AuditSetGlobalSaclA(
+    PCSTR ObjectTypeName,
+    PACL Acl
+  );
+
+#define AuditSetGlobalSacl __MINGW_NAME_AW(AuditSetGlobalSacl)
+
+  BOOLEAN NTAPI AuditQueryGlobalSaclW(
+    PCWSTR ObjectTypeName,
+    PACL *Acl
+  );
+
+  BOOLEAN NTAPI AuditQueryGlobalSaclA(
+    PCSTR ObjectTypeName,
+    PACL *Acl
+  );
+
+#define AuditQueryGlobalSacl __MINGW_NAME_AW(AuditQueryGlobalSacl)
+
+#if _WIN32_WINNT >= 0x0601
+
+#define PKU2U_PACKAGE_NAME_A "pku2u"
+#define PKU2U_PACKAGE_NAME L"pku2u"
+#define PKU2U_PACKAGE_NAME_W PKU2U_PACKAGE_NAME
+
+  typedef struct _PKU2U_CERT_BLOB {
+    ULONG CertOffset;
+    USHORT CertLength;
+  } PKU2U_CERT_BLOB, *PPKU2U_CERT_BLOB;
+
+#define PKU2U_CREDUI_CONTEXT_VERSION 0x4154414454524543
+
+  typedef struct _PKU2U_CREDUI_CONTEXT {
+    ULONG64 Version;
+    USHORT cbHeaderLength;
+    ULONG cbStructureLength;
+    USHORT CertArrayCount;
+    ULONG CertArrayOffset;
+  } PKU2U_CREDUI_CONTEXT, *PPKU2U_CREDUI_CONTEXT;
+
+  typedef enum _PKU2U_LOGON_SUBMIT_TYPE {
+    Pku2uCertificateS4ULogon = 14,
+  } PKU2U_LOGON_SUBMIT_TYPE, *PPKU2U_LOGON_SUBMIT_TYPE;
+
+  typedef struct _PKU2U_CERTIFICATE_S4U_LOGON {
+    PKU2U_LOGON_SUBMIT_TYPE MessageType;
+    ULONG Flags;
+    UNICODE_STRING UserPrincipalName;
+    UNICODE_STRING DomainName;
+    ULONG CertificateLength;
+    PUCHAR Certificate;
+  } PKU2U_CERTIFICATE_S4U_LOGON, *PPKU2U_CERTIFICATE_S4U_LOGON;
+
+#endif
 
 #ifdef __cplusplus
 }