zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

ntsecapi.h (100036B) - Raw


      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 
      7 #ifdef DEFINE_GUID
      8 
      9 #if !defined(INITGUID) || !defined(Audit_System_SecurityStateChange_defined)
     10 DEFINE_GUID(Audit_System_SecurityStateChange, 0x0cce9210, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     11 #ifdef INITGUID
     12 #define Audit_System_SecurityStateChange_defined
     13 #endif
     14 #endif
     15 
     16 #if !defined(INITGUID) || !defined(Audit_System_SecuritySubsystemExtension_defined)
     17 DEFINE_GUID(Audit_System_SecuritySubsystemExtension, 0x0cce9211, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     18 #ifdef INITGUID
     19 #define Audit_System_SecuritySubsystemExtension_defined
     20 #endif
     21 #endif
     22 
     23 #if !defined(INITGUID) || !defined(Audit_System_Integrity_defined)
     24 DEFINE_GUID(Audit_System_Integrity, 0x0cce9212, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     25 #ifdef INITGUID
     26 #define Audit_System_Integrity_defined
     27 #endif
     28 #endif
     29 
     30 #if !defined(INITGUID) || !defined(Audit_System_IPSecDriverEvents_defined)
     31 DEFINE_GUID(Audit_System_IPSecDriverEvents, 0x0cce9213, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     32 #ifdef INITGUID
     33 #define Audit_System_IPSecDriverEvents_defined
     34 #endif
     35 #endif
     36 
     37 #if !defined(INITGUID) || !defined(Audit_System_Others_defined)
     38 DEFINE_GUID(Audit_System_Others, 0x0cce9214, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     39 #ifdef INITGUID
     40 #define Audit_System_Others_defined
     41 #endif
     42 #endif
     43 
     44 #if !defined(INITGUID) || !defined(Audit_Logon_Logon_defined)
     45 DEFINE_GUID(Audit_Logon_Logon, 0x0cce9215, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     46 #ifdef INITGUID
     47 #define Audit_Logon_Logon_defined
     48 #endif
     49 #endif
     50 
     51 #if !defined(INITGUID) || !defined(Audit_Logon_Logoff_defined)
     52 DEFINE_GUID(Audit_Logon_Logoff, 0x0cce9216, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     53 #ifdef INITGUID
     54 #define Audit_Logon_Logoff_defined
     55 #endif
     56 #endif
     57 
     58 #if !defined(INITGUID) || !defined(Audit_Logon_AccountLockout_defined)
     59 DEFINE_GUID(Audit_Logon_AccountLockout, 0x0cce9217, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     60 #ifdef INITGUID
     61 #define Audit_Logon_AccountLockout_defined
     62 #endif
     63 #endif
     64 
     65 #if !defined(INITGUID) || !defined(Audit_Logon_IPSecMainMode_defined)
     66 DEFINE_GUID(Audit_Logon_IPSecMainMode, 0x0cce9218, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     67 #ifdef INITGUID
     68 #define Audit_Logon_IPSecMainMode_defined
     69 #endif
     70 #endif
     71 
     72 #if !defined(INITGUID) || !defined(Audit_Logon_IPSecQuickMode_defined)
     73 DEFINE_GUID(Audit_Logon_IPSecQuickMode, 0x0cce9219, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     74 #ifdef INITGUID
     75 #define Audit_Logon_IPSecQuickMode_defined
     76 #endif
     77 #endif
     78 
     79 #if !defined(INITGUID) || !defined(Audit_Logon_IPSecUserMode_defined)
     80 DEFINE_GUID(Audit_Logon_IPSecUserMode, 0x0cce921a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     81 #ifdef INITGUID
     82 #define Audit_Logon_IPSecUserMode_defined
     83 #endif
     84 #endif
     85 
     86 #if !defined(INITGUID) || !defined(Audit_Logon_SpecialLogon_defined)
     87 DEFINE_GUID(Audit_Logon_SpecialLogon, 0x0cce921b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     88 #ifdef INITGUID
     89 #define Audit_Logon_SpecialLogon_defined
     90 #endif
     91 #endif
     92 
     93 #if !defined(INITGUID) || !defined(Audit_Logon_Others_defined)
     94 DEFINE_GUID(Audit_Logon_Others, 0x0cce921c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
     95 #ifdef INITGUID
     96 #define Audit_Logon_Others_defined
     97 #endif
     98 #endif
     99 
    100 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_FileSystem_defined)
    101 DEFINE_GUID(Audit_ObjectAccess_FileSystem, 0x0cce921d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    102 #ifdef INITGUID
    103 #define Audit_ObjectAccess_FileSystem_defined
    104 #endif
    105 #endif
    106 
    107 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_Registry_defined)
    108 DEFINE_GUID(Audit_ObjectAccess_Registry, 0x0cce921e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    109 #ifdef INITGUID
    110 #define Audit_ObjectAccess_Registry_defined
    111 #endif
    112 #endif
    113 
    114 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_Kernel_defined)
    115 DEFINE_GUID(Audit_ObjectAccess_Kernel, 0x0cce921f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    116 #ifdef INITGUID
    117 #define Audit_ObjectAccess_Kernel_defined
    118 #endif
    119 #endif
    120 
    121 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_Sam_defined)
    122 DEFINE_GUID(Audit_ObjectAccess_Sam, 0x0cce9220, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    123 #ifdef INITGUID
    124 #define Audit_ObjectAccess_Sam_defined
    125 #endif
    126 #endif
    127 
    128 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_CertificationServices_defined)
    129 DEFINE_GUID(Audit_ObjectAccess_CertificationServices, 0x0cce9221, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    130 #ifdef INITGUID
    131 #define Audit_ObjectAccess_CertificationServices_defined
    132 #endif
    133 #endif
    134 
    135 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_ApplicationGenerated_defined)
    136 DEFINE_GUID(Audit_ObjectAccess_ApplicationGenerated, 0x0cce9222, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    137 #ifdef INITGUID
    138 #define Audit_ObjectAccess_ApplicationGenerated_defined
    139 #endif
    140 #endif
    141 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_Handle_defined)
    142 DEFINE_GUID(Audit_ObjectAccess_Handle, 0x0cce9223, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    143 #ifdef INITGUID
    144 #define Audit_ObjectAccess_Handle_defined
    145 #endif
    146 #endif
    147 
    148 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_Share_defined)
    149 DEFINE_GUID(Audit_ObjectAccess_Share, 0x0cce9224, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    150 #ifdef INITGUID
    151 #define Audit_ObjectAccess_Share_defined
    152 #endif
    153 #endif
    154 
    155 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_FirewallPacketDrops_defined)
    156 DEFINE_GUID(Audit_ObjectAccess_FirewallPacketDrops, 0x0cce9225, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    157 #ifdef INITGUID
    158 #define Audit_ObjectAccess_FirewallPacketDrops_defined
    159 #endif
    160 #endif
    161 
    162 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_FirewallConnection_defined)
    163 DEFINE_GUID(Audit_ObjectAccess_FirewallConnection, 0x0cce9226, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    164 #ifdef INITGUID
    165 #define Audit_ObjectAccess_FirewallConnection_defined
    166 #endif
    167 #endif
    168 
    169 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_Other_defined)
    170 DEFINE_GUID(Audit_ObjectAccess_Other, 0x0cce9227, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    171 #ifdef INITGUID
    172 #define Audit_ObjectAccess_Other_defined
    173 #endif
    174 #endif
    175 
    176 #if !defined(INITGUID) || !defined(Audit_PrivilegeUse_Sensitive_defined)
    177 DEFINE_GUID(Audit_PrivilegeUse_Sensitive, 0x0cce9228, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    178 #ifdef INITGUID
    179 #define Audit_PrivilegeUse_Sensitive_defined
    180 #endif
    181 #endif
    182 
    183 #if !defined(INITGUID) || !defined(Audit_PrivilegeUse_NonSensitive_defined)
    184 DEFINE_GUID(Audit_PrivilegeUse_NonSensitive, 0x0cce9229, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    185 #ifdef INITGUID
    186 #define Audit_PrivilegeUse_NonSensitive_defined
    187 #endif
    188 #endif
    189 
    190 #if !defined(INITGUID) || !defined(Audit_PrivilegeUse_Others_defined)
    191 DEFINE_GUID(Audit_PrivilegeUse_Others, 0x0cce922a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    192 #ifdef INITGUID
    193 #define Audit_PrivilegeUse_Others_defined
    194 #endif
    195 #endif
    196 
    197 #if !defined(INITGUID) || !defined(Audit_DetailedTracking_ProcessCreation_defined)
    198 DEFINE_GUID(Audit_DetailedTracking_ProcessCreation, 0x0cce922b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    199 #ifdef INITGUID
    200 #define Audit_DetailedTracking_ProcessCreation_defined
    201 #endif
    202 #endif
    203 
    204 #if !defined(INITGUID) || !defined(Audit_DetailedTracking_ProcessTermination_defined)
    205 DEFINE_GUID(Audit_DetailedTracking_ProcessTermination, 0x0cce922c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    206 #ifdef INITGUID
    207 #define Audit_DetailedTracking_ProcessTermination_defined
    208 #endif
    209 #endif
    210 
    211 #if !defined(INITGUID) || !defined(Audit_DetailedTracking_DpapiActivity_defined)
    212 DEFINE_GUID(Audit_DetailedTracking_DpapiActivity, 0x0cce922d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    213 #ifdef INITGUID
    214 #define Audit_DetailedTracking_DpapiActivity_defined
    215 #endif
    216 #endif
    217 
    218 #if !defined(INITGUID) || !defined(Audit_DetailedTracking_RpcCall_defined)
    219 DEFINE_GUID(Audit_DetailedTracking_RpcCall, 0x0cce922e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    220 #ifdef INITGUID
    221 #define Audit_DetailedTracking_RpcCall_defined
    222 #endif
    223 #endif
    224 
    225 #if !defined(INITGUID) || !defined(Audit_PolicyChange_AuditPolicy_defined)
    226 DEFINE_GUID(Audit_PolicyChange_AuditPolicy, 0x0cce922f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    227 #ifdef INITGUID
    228 #define Audit_PolicyChange_AuditPolicy_defined
    229 #endif
    230 #endif
    231 
    232 #if !defined(INITGUID) || !defined(Audit_PolicyChange_AuthenticationPolicy_defined)
    233 DEFINE_GUID(Audit_PolicyChange_AuthenticationPolicy, 0x0cce9230, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    234 #ifdef INITGUID
    235 #define Audit_PolicyChange_AuthenticationPolicy_defined
    236 #endif
    237 #endif
    238 
    239 #if !defined(INITGUID) || !defined(Audit_PolicyChange_AuthorizationPolicy_defined)
    240 DEFINE_GUID(Audit_PolicyChange_AuthorizationPolicy, 0x0cce9231, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    241 #ifdef INITGUID
    242 #define Audit_PolicyChange_AuthorizationPolicy_defined
    243 #endif
    244 #endif
    245 
    246 #if !defined(INITGUID) || !defined(Audit_PolicyChange_MpsscvRulePolicy_defined)
    247 DEFINE_GUID(Audit_PolicyChange_MpsscvRulePolicy, 0x0cce9232, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    248 #ifdef INITGUID
    249 #define Audit_PolicyChange_MpsscvRulePolicy_defined
    250 #endif
    251 #endif
    252 
    253 #if !defined(INITGUID) || !defined(Audit_PolicyChange_WfpIPSecPolicy_defined)
    254 DEFINE_GUID(Audit_PolicyChange_WfpIPSecPolicy, 0x0cce9233, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    255 #ifdef INITGUID
    256 #define Audit_PolicyChange_WfpIPSecPolicy_defined
    257 #endif
    258 #endif
    259 
    260 #if !defined(INITGUID) || !defined(Audit_PolicyChange_Others_defined)
    261 DEFINE_GUID(Audit_PolicyChange_Others, 0x0cce9234, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    262 #ifdef INITGUID
    263 #define Audit_PolicyChange_Others_defined
    264 #endif
    265 #endif
    266 
    267 #if !defined(INITGUID) || !defined(Audit_AccountManagement_UserAccount_defined)
    268 DEFINE_GUID(Audit_AccountManagement_UserAccount, 0x0cce9235, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    269 #ifdef INITGUID
    270 #define Audit_AccountManagement_UserAccount_defined
    271 #endif
    272 #endif
    273 
    274 #if !defined(INITGUID) || !defined(Audit_AccountManagement_ComputerAccount_defined)
    275 DEFINE_GUID(Audit_AccountManagement_ComputerAccount, 0x0cce9236, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    276 #ifdef INITGUID
    277 #define Audit_AccountManagement_ComputerAccount_defined
    278 #endif
    279 #endif
    280 
    281 #if !defined(INITGUID) || !defined(Audit_AccountManagement_SecurityGroup_defined)
    282 DEFINE_GUID(Audit_AccountManagement_SecurityGroup, 0x0cce9237, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    283 #ifdef INITGUID
    284 #define Audit_AccountManagement_SecurityGroup_defined
    285 #endif
    286 #endif
    287 
    288 #if !defined(INITGUID) || !defined(Audit_AccountManagement_DistributionGroup_defined)
    289 DEFINE_GUID(Audit_AccountManagement_DistributionGroup, 0x0cce9238, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    290 #ifdef INITGUID
    291 #define Audit_AccountManagement_DistributionGroup_defined
    292 #endif
    293 #endif
    294 
    295 #if !defined(INITGUID) || !defined(Audit_AccountManagement_ApplicationGroup_defined)
    296 DEFINE_GUID(Audit_AccountManagement_ApplicationGroup, 0x0cce9239, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    297 #ifdef INITGUID
    298 #define Audit_AccountManagement_ApplicationGroup_defined
    299 #endif
    300 #endif
    301 
    302 #if !defined(INITGUID) || !defined(Audit_AccountManagement_Others_defined)
    303 DEFINE_GUID(Audit_AccountManagement_Others, 0x0cce923a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    304 #ifdef INITGUID
    305 #define Audit_AccountManagement_Others_defined
    306 #endif
    307 #endif
    308 
    309 #if !defined(INITGUID) || !defined(Audit_DSAccess_DSAccess_defined)
    310 DEFINE_GUID(Audit_DSAccess_DSAccess, 0x0cce923b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    311 #ifdef INITGUID
    312 #define Audit_DSAccess_DSAccess_defined
    313 #endif
    314 #endif
    315 
    316 #if !defined(INITGUID) || !defined(Audit_DsAccess_AdAuditChanges_defined)
    317 DEFINE_GUID(Audit_DsAccess_AdAuditChanges, 0x0cce923c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    318 #ifdef INITGUID
    319 #define Audit_DsAccess_AdAuditChanges_defined
    320 #endif
    321 #endif
    322 
    323 #if !defined(INITGUID) || !defined(Audit_Ds_Replication_defined)
    324 DEFINE_GUID(Audit_Ds_Replication, 0x0cce923d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    325 #ifdef INITGUID
    326 #define Audit_Ds_Replication_defined
    327 #endif
    328 #endif
    329 
    330 #if !defined(INITGUID) || !defined(Audit_Ds_DetailedReplication_defined)
    331 DEFINE_GUID(Audit_Ds_DetailedReplication, 0x0cce923e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    332 #ifdef INITGUID
    333 #define Audit_Ds_DetailedReplication_defined
    334 #endif
    335 #endif
    336 
    337 #if !defined(INITGUID) || !defined(Audit_AccountLogon_CredentialValidation_defined)
    338 DEFINE_GUID(Audit_AccountLogon_CredentialValidation, 0x0cce923f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    339 #ifdef INITGUID
    340 #define Audit_AccountLogon_CredentialValidation_defined
    341 #endif
    342 #endif
    343 
    344 #if !defined(INITGUID) || !defined(Audit_AccountLogon_Kerberos_defined)
    345 DEFINE_GUID(Audit_AccountLogon_Kerberos, 0x0cce9240, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    346 #ifdef INITGUID
    347 #define Audit_AccountLogon_Kerberos_defined
    348 #endif
    349 #endif
    350 
    351 #if !defined(INITGUID) || !defined(Audit_AccountLogon_Others_defined)
    352 DEFINE_GUID(Audit_AccountLogon_Others, 0x0cce9241, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    353 #ifdef INITGUID
    354 #define Audit_AccountLogon_Others_defined
    355 #endif
    356 #endif
    357 
    358 #if !defined(INITGUID) || !defined(Audit_AccountLogon_KerbCredentialValidation_defined)
    359 DEFINE_GUID(Audit_AccountLogon_KerbCredentialValidation, 0x0cce9242, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    360 #ifdef INITGUID
    361 #define Audit_AccountLogon_KerbCredentialValidation_defined
    362 #endif
    363 #endif
    364 
    365 #if !defined(INITGUID) || !defined(Audit_Logon_NPS_defined)
    366 DEFINE_GUID(Audit_Logon_NPS, 0x0cce9243, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    367 #ifdef INITGUID
    368 #define Audit_Logon_NPS_defined
    369 #endif
    370 #endif
    371 
    372 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_DetailedFileShare_defined)
    373 DEFINE_GUID(Audit_ObjectAccess_DetailedFileShare, 0x0cce9244, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    374 #ifdef INITGUID
    375 #define Audit_ObjectAccess_DetailedFileShare_defined
    376 #endif
    377 #endif
    378 
    379 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_RemovableStorage_defined)
    380 DEFINE_GUID(Audit_ObjectAccess_RemovableStorage, 0x0cce9245, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    381 #ifdef INITGUID
    382 #define Audit_ObjectAccess_RemovableStorage_defined
    383 #endif
    384 #endif
    385 
    386 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_CbacStaging_defined)
    387 DEFINE_GUID(Audit_ObjectAccess_CbacStaging, 0x0cce9246, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    388 #ifdef INITGUID
    389 #define Audit_ObjectAccess_CbacStaging_defined
    390 #endif
    391 #endif
    392 
    393 #if !defined(INITGUID) || !defined(Audit_Logon_Claims_defined)
    394 DEFINE_GUID(Audit_Logon_Claims, 0x0cce9247, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    395 #ifdef INITGUID
    396 #define Audit_Logon_Claims_defined
    397 #endif
    398 #endif
    399 
    400 #if !defined(INITGUID) || !defined(Audit_DetailedTracking_PnpActivity_defined)
    401 DEFINE_GUID(Audit_DetailedTracking_PnpActivity, 0x0cce9248, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    402 #ifdef INITGUID
    403 #define Audit_DetailedTracking_PnpActivity_defined
    404 #endif
    405 #endif
    406 
    407 #if !defined(INITGUID) || !defined(Audit_Logon_Groups_defined)
    408 DEFINE_GUID(Audit_Logon_Groups, 0x0cce9249, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    409 #ifdef INITGUID
    410 #define Audit_Logon_Groups_defined
    411 #endif
    412 #endif
    413 
    414 #if !defined(INITGUID) || !defined(Audit_DetailedTracking_TokenRightAdjusted_defined)
    415 DEFINE_GUID(Audit_DetailedTracking_TokenRightAdjusted, 0x0cce924a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    416 #ifdef INITGUID
    417 #define Audit_DetailedTracking_TokenRightAdjusted_defined
    418 #endif
    419 #endif
    420 
    421 #if !defined(INITGUID) || !defined(Audit_System_defined)
    422 DEFINE_GUID(Audit_System, 0x69979848, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    423 #ifdef INITGUID
    424 #define Audit_System_defined
    425 #endif
    426 #endif
    427 
    428 #if !defined(INITGUID) || !defined(Audit_Logon_defined)
    429 DEFINE_GUID(Audit_Logon, 0x69979849, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    430 #ifdef INITGUID
    431 #define Audit_Logon_defined
    432 #endif
    433 #endif
    434 
    435 #if !defined(INITGUID) || !defined(Audit_ObjectAccess_defined)
    436 DEFINE_GUID(Audit_ObjectAccess, 0x6997984a, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    437 #ifdef INITGUID
    438 #define Audit_ObjectAccess_defined
    439 #endif
    440 #endif
    441 
    442 #if !defined(INITGUID) || !defined(Audit_PrivilegeUse_defined)
    443 DEFINE_GUID(Audit_PrivilegeUse, 0x6997984b, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    444 #ifdef INITGUID
    445 #define Audit_PrivilegeUse_defined
    446 #endif
    447 #endif
    448 
    449 #if !defined(INITGUID) || !defined(Audit_DetailedTracking_defined)
    450 DEFINE_GUID(Audit_DetailedTracking, 0x6997984c, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    451 #ifdef INITGUID
    452 #define Audit_DetailedTracking_defined
    453 #endif
    454 #endif
    455 
    456 #if !defined(INITGUID) || !defined(Audit_PolicyChange_defined)
    457 DEFINE_GUID(Audit_PolicyChange, 0x6997984d, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    458 #ifdef INITGUID
    459 #define Audit_PolicyChange_defined
    460 #endif
    461 #endif
    462 
    463 #if !defined(INITGUID) || !defined(Audit_AccountManagement_defined)
    464 DEFINE_GUID(Audit_AccountManagement, 0x6997984e, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    465 #ifdef INITGUID
    466 #define Audit_AccountManagement_defined
    467 #endif
    468 #endif
    469 
    470 #if !defined(INITGUID) || !defined(Audit_DirectoryServiceAccess_defined)
    471 DEFINE_GUID(Audit_DirectoryServiceAccess, 0x6997984f, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    472 #ifdef INITGUID
    473 #define Audit_DirectoryServiceAccess_defined
    474 #endif
    475 #endif
    476 
    477 #if !defined(INITGUID) || !defined(Audit_AccountLogon_defined)
    478 DEFINE_GUID(Audit_AccountLogon, 0x69979850, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30);
    479 #ifdef INITGUID
    480 #define Audit_AccountLogon_defined
    481 #endif
    482 #endif
    483 #endif
    484 
    485 #ifndef _NTSECAPI_
    486 #define _NTSECAPI_
    487 
    488 #ifdef __cplusplus
    489 extern "C" {
    490 #endif
    491 
    492 #if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK)
    493 #define _NTSTATUS_PSDK
    494   typedef LONG NTSTATUS,*PNTSTATUS;
    495 #endif
    496 
    497 #ifndef _NTLSA_IFS_
    498   typedef ULONG LSA_OPERATIONAL_MODE,*PLSA_OPERATIONAL_MODE;
    499 #endif
    500 
    501 #define LSA_MODE_PASSWORD_PROTECTED (__MSABI_LONG(0x00000001))
    502 #define LSA_MODE_INDIVIDUAL_ACCOUNTS (__MSABI_LONG(0x00000002))
    503 #define LSA_MODE_MANDATORY_ACCESS (__MSABI_LONG(0x00000004))
    504 #define LSA_MODE_LOG_FULL (__MSABI_LONG(0x00000008))
    505 
    506 #ifndef _NTLSA_IFS_
    507   typedef enum _SECURITY_LOGON_TYPE {
    508     UndefinedLogonType = 0,
    509     Interactive = 2,
    510     Network,
    511     Batch,
    512     Service,
    513     Proxy,
    514     Unlock,
    515     NetworkCleartext,
    516     NewCredentials
    517 #if _WIN32_WINNT >= 0x0501
    518     ,RemoteInteractive
    519     ,CachedInteractive
    520 #endif
    521 #if _WIN32_WINNT >= 0x0502
    522     ,CachedRemoteInteractive
    523     ,CachedUnlock
    524 #endif
    525   } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
    526 
    527 #endif
    528 
    529 #ifndef _NTLSA_IFS_
    530 
    531 #ifndef _NTLSA_AUDIT_
    532 #define _NTLSA_AUDIT_
    533 
    534 typedef enum _SE_ADT_PARAMETER_TYPE {
    535     SeAdtParmTypeNone = 0,
    536     SeAdtParmTypeString,
    537     SeAdtParmTypeFileSpec,
    538     SeAdtParmTypeUlong,
    539     SeAdtParmTypeSid,
    540     SeAdtParmTypeLogonId,
    541     SeAdtParmTypeNoLogonId,
    542     SeAdtParmTypeAccessMask,
    543     SeAdtParmTypePrivs,
    544     SeAdtParmTypeObjectTypes,
    545     SeAdtParmTypeHexUlong,
    546     SeAdtParmTypePtr,
    547     SeAdtParmTypeTime,
    548     SeAdtParmTypeGuid,
    549     SeAdtParmTypeLuid,
    550     SeAdtParmTypeHexInt64,
    551     SeAdtParmTypeStringList,
    552     SeAdtParmTypeSidList,
    553     SeAdtParmTypeDuration,
    554     SeAdtParmTypeUserAccountControl,
    555     SeAdtParmTypeNoUac,
    556     SeAdtParmTypeMessage,
    557     SeAdtParmTypeDateTime,
    558     SeAdtParmTypeSockAddr,
    559     SeAdtParmTypeSD,
    560     SeAdtParmTypeLogonHours,
    561     SeAdtParmTypeLogonIdNoSid,
    562     SeAdtParmTypeUlongNoConv,
    563     SeAdtParmTypeSockAddrNoPort,
    564     SeAdtParmTypeAccessReason,
    565     SeAdtParmTypeStagingReason,
    566     SeAdtParmTypeResourceAttribute,
    567     SeAdtParmTypeClaims,
    568     SeAdtParmTypeLogonIdAsSid,
    569     SeAdtParmTypeMultiSzString,
    570     SeAdtParmTypeLogonIdEx
    571   } SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE;
    572 
    573 #include <guiddef.h>
    574 
    575 #define SE_ADT_OBJECT_ONLY 0x1
    576 
    577   typedef struct _SE_ADT_OBJECT_TYPE {
    578     GUID ObjectType;
    579     USHORT Flags;
    580     USHORT Level;
    581     ACCESS_MASK AccessMask;
    582   } SE_ADT_OBJECT_TYPE,*PSE_ADT_OBJECT_TYPE;
    583 
    584   typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
    585     SE_ADT_PARAMETER_TYPE Type;
    586     ULONG Length;
    587     ULONG_PTR Data[2];
    588     PVOID Address;
    589   } SE_ADT_PARAMETER_ARRAY_ENTRY,*PSE_ADT_PARAMETER_ARRAY_ENTRY;
    590 
    591   typedef struct _SE_ADT_ACCESS_REASON {
    592     ACCESS_MASK AccessMask;
    593     ULONG AccessReasons[32];
    594     ULONG ObjectTypeIndex;
    595     ULONG AccessGranted;
    596     PSECURITY_DESCRIPTOR SecurityDescriptor;
    597   } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON;
    598 
    599   typedef struct _SE_ADT_CLAIMS {
    600     ULONG Length;
    601     PCLAIMS_BLOB Claims;
    602   } SE_ADT_CLAIMS, *PSE_ADT_CLAIMS;
    603 
    604 #define SE_MAX_AUDIT_PARAMETERS 32
    605 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
    606 
    607   typedef struct _SE_ADT_PARAMETER_ARRAY {
    608     ULONG CategoryId;
    609     ULONG AuditId;
    610     ULONG ParameterCount;
    611     ULONG Length;
    612     USHORT Type;
    613     ULONG Flags;
    614     SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[SE_MAX_AUDIT_PARAMETERS];
    615   } SE_ADT_PARAMETER_ARRAY,*PSE_ADT_PARAMETER_ARRAY;
    616 
    617   typedef struct _SE_ADT_PARAMETER_ARRAY_EX {
    618     ULONG CategoryId;
    619     ULONG AuditId;
    620     ULONG Version;
    621     ULONG ParameterCount;
    622     ULONG Length;
    623     USHORT FlatSubCategoryId;
    624     USHORT Type;
    625     ULONG Flags;
    626     SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[SE_MAX_AUDIT_PARAMETERS];
    627   } SE_ADT_PARAMETER_ARRAY_EX, *PSE_ADT_PARAMETER_ARRAY_EX;
    628 
    629 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
    630 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
    631 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
    632 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
    633 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
    634 
    635 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(AuditParameters) (sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * (SE_MAX_AUDIT_PARAMETERS - AuditParameters->ParameterCount))
    636 
    637 #endif /* _NTLSA_AUDIT_ */
    638 #endif /* _NTLSA_IFS_ */
    639 
    640   typedef enum _POLICY_AUDIT_EVENT_TYPE {
    641     AuditCategorySystem = 0,AuditCategoryLogon,AuditCategoryObjectAccess,AuditCategoryPrivilegeUse,AuditCategoryDetailedTracking,
    642     AuditCategoryPolicyChange,AuditCategoryAccountManagement,AuditCategoryDirectoryServiceAccess,AuditCategoryAccountLogon
    643   } POLICY_AUDIT_EVENT_TYPE,*PPOLICY_AUDIT_EVENT_TYPE;
    644 
    645 #define POLICY_AUDIT_EVENT_UNCHANGED (__MSABI_LONG(0x00000000))
    646 #define POLICY_AUDIT_EVENT_SUCCESS (__MSABI_LONG(0x00000001))
    647 #define POLICY_AUDIT_EVENT_FAILURE (__MSABI_LONG(0x00000002))
    648 #define POLICY_AUDIT_EVENT_NONE (__MSABI_LONG(0x00000004))
    649 #define POLICY_AUDIT_EVENT_MASK (POLICY_AUDIT_EVENT_SUCCESS | POLICY_AUDIT_EVENT_FAILURE | POLICY_AUDIT_EVENT_UNCHANGED | POLICY_AUDIT_EVENT_NONE)
    650 
    651 #ifdef _NTDEF_
    652   typedef UNICODE_STRING LSA_UNICODE_STRING,*PLSA_UNICODE_STRING;
    653   typedef STRING LSA_STRING,*PLSA_STRING;
    654   typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES,*PLSA_OBJECT_ATTRIBUTES;
    655 #else
    656 
    657 #ifndef _NO_W32_PSEUDO_MODIFIERS
    658 #ifndef IN
    659 #define IN
    660 #endif
    661 #ifndef OUT
    662 #define OUT
    663 #endif
    664 #ifndef OPTIONAL
    665 #define OPTIONAL
    666 #endif
    667 #endif
    668 
    669   typedef struct _LSA_UNICODE_STRING {
    670     USHORT Length;
    671     USHORT MaximumLength;
    672     PWSTR Buffer;
    673   } LSA_UNICODE_STRING,*PLSA_UNICODE_STRING;
    674 
    675   typedef struct _LSA_STRING {
    676     USHORT Length;
    677     USHORT MaximumLength;
    678     PCHAR Buffer;
    679   } LSA_STRING,*PLSA_STRING;
    680 
    681   typedef struct _LSA_OBJECT_ATTRIBUTES {
    682     ULONG Length;
    683     HANDLE RootDirectory;
    684     PLSA_UNICODE_STRING ObjectName;
    685     ULONG Attributes;
    686     PVOID SecurityDescriptor;
    687     PVOID SecurityQualityOfService;
    688   } LSA_OBJECT_ATTRIBUTES,*PLSA_OBJECT_ATTRIBUTES;
    689 #endif
    690 
    691 #define LSA_SUCCESS(Error) ((LONG)(Error) >= 0)
    692 
    693 #ifndef _NTLSA_IFS_
    694   NTSTATUS NTAPI LsaRegisterLogonProcess(PLSA_STRING LogonProcessName,PHANDLE LsaHandle,PLSA_OPERATIONAL_MODE SecurityMode);
    695   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);
    696   NTSTATUS NTAPI LsaLookupAuthenticationPackage(HANDLE LsaHandle,PLSA_STRING PackageName,PULONG AuthenticationPackage);
    697   NTSTATUS NTAPI LsaFreeReturnBuffer (PVOID Buffer);
    698   NTSTATUS NTAPI LsaCallAuthenticationPackage(HANDLE LsaHandle,ULONG AuthenticationPackage,PVOID ProtocolSubmitBuffer,ULONG SubmitBufferLength,PVOID *ProtocolReturnBuffer,PULONG ReturnBufferLength,PNTSTATUS ProtocolStatus);
    699   NTSTATUS NTAPI LsaDeregisterLogonProcess(HANDLE LsaHandle);
    700   NTSTATUS NTAPI LsaConnectUntrusted(PHANDLE LsaHandle);
    701   NTSTATUS NTAPI LsaInsertProtectedProcessAddress(PVOID BufferAddress,ULONG BufferSize);
    702   NTSTATUS NTAPI LsaRemoveProtectedProcessAddress(PVOID BufferAddress,ULONG BufferSize);
    703 #endif
    704 
    705 #define POLICY_VIEW_LOCAL_INFORMATION __MSABI_LONG(0x00000001)
    706 #define POLICY_VIEW_AUDIT_INFORMATION __MSABI_LONG(0x00000002)
    707 #define POLICY_GET_PRIVATE_INFORMATION __MSABI_LONG(0x00000004)
    708 #define POLICY_TRUST_ADMIN __MSABI_LONG(0x00000008)
    709 #define POLICY_CREATE_ACCOUNT __MSABI_LONG(0x00000010)
    710 #define POLICY_CREATE_SECRET __MSABI_LONG(0x00000020)
    711 #define POLICY_CREATE_PRIVILEGE __MSABI_LONG(0x00000040)
    712 #define POLICY_SET_DEFAULT_QUOTA_LIMITS __MSABI_LONG(0x00000080)
    713 #define POLICY_SET_AUDIT_REQUIREMENTS __MSABI_LONG(0x00000100)
    714 #define POLICY_AUDIT_LOG_ADMIN __MSABI_LONG(0x00000200)
    715 #define POLICY_SERVER_ADMIN __MSABI_LONG(0x00000400)
    716 #define POLICY_LOOKUP_NAMES __MSABI_LONG(0x00000800)
    717 #define POLICY_NOTIFICATION __MSABI_LONG(0x00001000)
    718 
    719 #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)
    720 #define POLICY_READ (STANDARD_RIGHTS_READ | POLICY_VIEW_AUDIT_INFORMATION | POLICY_GET_PRIVATE_INFORMATION)
    721 #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)
    722 #define POLICY_EXECUTE (STANDARD_RIGHTS_EXECUTE | POLICY_VIEW_LOCAL_INFORMATION | POLICY_LOOKUP_NAMES)
    723 
    724   typedef struct _LSA_TRUST_INFORMATION {
    725     LSA_UNICODE_STRING Name;
    726     PSID Sid;
    727   } LSA_TRUST_INFORMATION,*PLSA_TRUST_INFORMATION;
    728 
    729   typedef struct _LSA_REFERENCED_DOMAIN_LIST {
    730     ULONG Entries;
    731     PLSA_TRUST_INFORMATION Domains;
    732   } LSA_REFERENCED_DOMAIN_LIST,*PLSA_REFERENCED_DOMAIN_LIST;
    733 
    734   typedef struct _LSA_TRANSLATED_SID {
    735     SID_NAME_USE Use;
    736     ULONG RelativeId;
    737     LONG DomainIndex;
    738   } LSA_TRANSLATED_SID,*PLSA_TRANSLATED_SID;
    739 
    740   typedef struct _LSA_TRANSLATED_SID2 {
    741     SID_NAME_USE Use;
    742     PSID Sid;
    743     LONG DomainIndex;
    744     ULONG Flags;
    745   } LSA_TRANSLATED_SID2,*PLSA_TRANSLATED_SID2;
    746 
    747   typedef struct _LSA_TRANSLATED_NAME {
    748     SID_NAME_USE Use;
    749     LSA_UNICODE_STRING Name;
    750     LONG DomainIndex;
    751   } LSA_TRANSLATED_NAME,*PLSA_TRANSLATED_NAME;
    752 
    753   typedef enum _POLICY_LSA_SERVER_ROLE {
    754     PolicyServerRoleBackup = 2,PolicyServerRolePrimary
    755   } POLICY_LSA_SERVER_ROLE,*PPOLICY_LSA_SERVER_ROLE;
    756 
    757   typedef ULONG POLICY_AUDIT_EVENT_OPTIONS,*PPOLICY_AUDIT_EVENT_OPTIONS;
    758 
    759   typedef enum _POLICY_INFORMATION_CLASS {
    760     PolicyAuditLogInformation = 1,
    761     PolicyAuditEventsInformation,
    762     PolicyPrimaryDomainInformation,
    763     PolicyPdAccountInformation,
    764     PolicyAccountDomainInformation,
    765     PolicyLsaServerRoleInformation,
    766     PolicyReplicaSourceInformation,
    767     PolicyDefaultQuotaInformation,
    768     PolicyModificationInformation,
    769     PolicyAuditFullSetInformation,
    770     PolicyAuditFullQueryInformation,
    771     PolicyDnsDomainInformation,
    772     PolicyDnsDomainInformationInt,
    773     PolicyLocalAccountDomainInformation,
    774     PolicyMachineAccountInformation,
    775     PolicyMachineAccountInformation2,
    776     PolicyLastEntry
    777   } POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS;
    778 
    779   typedef struct _POLICY_AUDIT_LOG_INFO {
    780     ULONG AuditLogPercentFull;
    781     ULONG MaximumLogSize;
    782     LARGE_INTEGER AuditRetentionPeriod;
    783     BOOLEAN AuditLogFullShutdownInProgress;
    784     LARGE_INTEGER TimeToShutdown;
    785     ULONG NextAuditRecordId;
    786   } POLICY_AUDIT_LOG_INFO,*PPOLICY_AUDIT_LOG_INFO;
    787 
    788   typedef struct _POLICY_AUDIT_EVENTS_INFO {
    789     BOOLEAN AuditingMode;
    790     PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
    791     ULONG MaximumAuditEventCount;
    792   } POLICY_AUDIT_EVENTS_INFO,*PPOLICY_AUDIT_EVENTS_INFO;
    793 
    794   typedef struct _POLICY_AUDIT_SUBCATEGORIES_INFO {
    795     ULONG MaximumSubCategoryCount;
    796     PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
    797   } POLICY_AUDIT_SUBCATEGORIES_INFO, *PPOLICY_AUDIT_SUBCATEGORIES_INFO;
    798 
    799   typedef struct _POLICY_AUDIT_CATEGORIES_INFO {
    800     ULONG MaximumCategoryCount;
    801     PPOLICY_AUDIT_SUBCATEGORIES_INFO SubCategoriesInfo;
    802   } POLICY_AUDIT_CATEGORIES_INFO, *PPOLICY_AUDIT_CATEGORIES_INFO;
    803 
    804   typedef struct _POLICY_ACCOUNT_DOMAIN_INFO {
    805     LSA_UNICODE_STRING DomainName;
    806     PSID DomainSid;
    807   } POLICY_ACCOUNT_DOMAIN_INFO,*PPOLICY_ACCOUNT_DOMAIN_INFO;
    808 
    809   typedef struct _POLICY_PRIMARY_DOMAIN_INFO {
    810     LSA_UNICODE_STRING Name;
    811     PSID Sid;
    812   } POLICY_PRIMARY_DOMAIN_INFO,*PPOLICY_PRIMARY_DOMAIN_INFO;
    813 
    814   typedef struct _POLICY_DNS_DOMAIN_INFO {
    815     LSA_UNICODE_STRING Name;
    816     LSA_UNICODE_STRING DnsDomainName;
    817     LSA_UNICODE_STRING DnsForestName;
    818     GUID DomainGuid;
    819     PSID Sid;
    820   } POLICY_DNS_DOMAIN_INFO,*PPOLICY_DNS_DOMAIN_INFO;
    821 
    822   typedef struct _POLICY_PD_ACCOUNT_INFO {
    823     LSA_UNICODE_STRING Name;
    824   } POLICY_PD_ACCOUNT_INFO,*PPOLICY_PD_ACCOUNT_INFO;
    825 
    826   typedef struct _POLICY_LSA_SERVER_ROLE_INFO {
    827     POLICY_LSA_SERVER_ROLE LsaServerRole;
    828   } POLICY_LSA_SERVER_ROLE_INFO,*PPOLICY_LSA_SERVER_ROLE_INFO;
    829 
    830   typedef struct _POLICY_REPLICA_SOURCE_INFO {
    831     LSA_UNICODE_STRING ReplicaSource;
    832     LSA_UNICODE_STRING ReplicaAccountName;
    833   } POLICY_REPLICA_SOURCE_INFO,*PPOLICY_REPLICA_SOURCE_INFO;
    834 
    835   typedef struct _POLICY_DEFAULT_QUOTA_INFO {
    836     QUOTA_LIMITS QuotaLimits;
    837   } POLICY_DEFAULT_QUOTA_INFO,*PPOLICY_DEFAULT_QUOTA_INFO;
    838 
    839   typedef struct _POLICY_MODIFICATION_INFO {
    840     LARGE_INTEGER ModifiedId;
    841     LARGE_INTEGER DatabaseCreationTime;
    842   } POLICY_MODIFICATION_INFO,*PPOLICY_MODIFICATION_INFO;
    843 
    844   typedef struct _POLICY_AUDIT_FULL_SET_INFO {
    845     BOOLEAN ShutDownOnFull;
    846   } POLICY_AUDIT_FULL_SET_INFO,*PPOLICY_AUDIT_FULL_SET_INFO;
    847 
    848   typedef struct _POLICY_AUDIT_FULL_QUERY_INFO {
    849     BOOLEAN ShutDownOnFull;
    850     BOOLEAN LogIsFull;
    851   } POLICY_AUDIT_FULL_QUERY_INFO,*PPOLICY_AUDIT_FULL_QUERY_INFO;
    852 
    853   typedef enum _POLICY_DOMAIN_INFORMATION_CLASS {
    854 #if _WIN32_WINNT <= 0x0500
    855     PolicyDomainQualityOfServiceInformation = 1,
    856 #endif
    857     PolicyDomainEfsInformation = 2
    858     ,PolicyDomainKerberosTicketInformation
    859   } POLICY_DOMAIN_INFORMATION_CLASS, *PPOLICY_DOMAIN_INFORMATION_CLASS;
    860 
    861   typedef struct _POLICY_DOMAIN_EFS_INFO {
    862     ULONG InfoLength;
    863     PUCHAR EfsBlob;
    864   } POLICY_DOMAIN_EFS_INFO,*PPOLICY_DOMAIN_EFS_INFO;
    865 
    866 #define POLICY_KERBEROS_VALIDATE_CLIENT 0x00000080
    867 
    868   typedef struct _POLICY_DOMAIN_KERBEROS_TICKET_INFO {
    869     ULONG AuthenticationOptions;
    870     LARGE_INTEGER MaxServiceTicketAge;
    871     LARGE_INTEGER MaxTicketAge;
    872     LARGE_INTEGER MaxRenewAge;
    873     LARGE_INTEGER MaxClockSkew;
    874     LARGE_INTEGER Reserved;
    875   } POLICY_DOMAIN_KERBEROS_TICKET_INFO,*PPOLICY_DOMAIN_KERBEROS_TICKET_INFO;
    876 
    877   typedef struct _POLICY_MACHINE_ACCT_INFO {
    878     ULONG Rid;
    879     PSID Sid;
    880   } POLICY_MACHINE_ACCT_INFO, *PPOLICY_MACHINE_ACCT_INFO;
    881 
    882   typedef struct _POLICY_MACHINE_ACCT_INFO2 {
    883     ULONG Rid;
    884     PSID Sid;
    885     GUID ObjectGuid;
    886   } POLICY_MACHINE_ACCT_INFO2, *PPOLICY_MACHINE_ACCT_INFO2;
    887 
    888   typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS {
    889     PolicyNotifyAuditEventsInformation = 1,
    890     PolicyNotifyAccountDomainInformation,
    891     PolicyNotifyServerRoleInformation,
    892     PolicyNotifyDnsDomainInformation,
    893     PolicyNotifyDomainEfsInformation,
    894     PolicyNotifyDomainKerberosTicketInformation,
    895     PolicyNotifyMachineAccountPasswordInformation,
    896     PolicyNotifyGlobalSaclInformation,
    897     PolicyNotifyMax
    898   } POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS;
    899 
    900   typedef PVOID LSA_HANDLE,*PLSA_HANDLE;
    901 
    902 #define LSAD_AES_CRYPT_SHA512_HASH_SIZE 64
    903 #define LSAD_AES_KEY_SIZE 16
    904 #define LSAD_AES_SALT_SIZE 16
    905 #define LSAD_AES_BLOCK_SIZE 16
    906 
    907   typedef enum _TRUSTED_INFORMATION_CLASS {
    908     TrustedDomainNameInformation = 1,
    909     TrustedControllersInformation,
    910     TrustedPosixOffsetInformation,
    911     TrustedPasswordInformation,
    912     TrustedDomainInformationBasic,
    913     TrustedDomainInformationEx,
    914     TrustedDomainAuthInformation,
    915     TrustedDomainFullInformation,
    916     TrustedDomainAuthInformationInternal,
    917     TrustedDomainFullInformationInternal,
    918     TrustedDomainInformationEx2Internal,
    919     TrustedDomainFullInformation2Internal,
    920     TrustedDomainSupportedEncryptionTypes,
    921     TrustedDomainAuthInformationInternalAes,
    922     TrustedDomainFullInformationInternalAes
    923   } TRUSTED_INFORMATION_CLASS,*PTRUSTED_INFORMATION_CLASS;
    924 
    925   typedef struct _TRUSTED_DOMAIN_NAME_INFO {
    926     LSA_UNICODE_STRING Name;
    927   } TRUSTED_DOMAIN_NAME_INFO,*PTRUSTED_DOMAIN_NAME_INFO;
    928 
    929   typedef struct _TRUSTED_CONTROLLERS_INFO {
    930     ULONG Entries;
    931     PLSA_UNICODE_STRING Names;
    932   } TRUSTED_CONTROLLERS_INFO,*PTRUSTED_CONTROLLERS_INFO;
    933 
    934   typedef struct _TRUSTED_POSIX_OFFSET_INFO {
    935     ULONG Offset;
    936   } TRUSTED_POSIX_OFFSET_INFO,*PTRUSTED_POSIX_OFFSET_INFO;
    937 
    938   typedef struct _TRUSTED_PASSWORD_INFO {
    939     LSA_UNICODE_STRING Password;
    940     LSA_UNICODE_STRING OldPassword;
    941   } TRUSTED_PASSWORD_INFO,*PTRUSTED_PASSWORD_INFO;
    942 
    943   typedef LSA_TRUST_INFORMATION TRUSTED_DOMAIN_INFORMATION_BASIC;
    944   typedef PLSA_TRUST_INFORMATION PTRUSTED_DOMAIN_INFORMATION_BASIC;
    945 
    946 #define TRUST_DIRECTION_DISABLED 0x00000000
    947 #define TRUST_DIRECTION_INBOUND 0x00000001
    948 #define TRUST_DIRECTION_OUTBOUND 0x00000002
    949 #define TRUST_DIRECTION_BIDIRECTIONAL (TRUST_DIRECTION_INBOUND | TRUST_DIRECTION_OUTBOUND)
    950 
    951 #define TRUST_TYPE_DOWNLEVEL 0x00000001
    952 #define TRUST_TYPE_UPLEVEL 0x00000002
    953 #define TRUST_TYPE_MIT 0x00000003
    954 #define TRUST_TYPE_AAD 0x00000005
    955 
    956 #define TRUST_ATTRIBUTE_NON_TRANSITIVE 0x00000001
    957 #define TRUST_ATTRIBUTE_UPLEVEL_ONLY 0x00000002
    958 #define TRUST_ATTRIBUTE_QUARANTINED_DOMAIN 0x00000004
    959 #define TRUST_ATTRIBUTE_FOREST_TRANSITIVE 0x00000008
    960 #define TRUST_ATTRIBUTE_CROSS_ORGANIZATION 0x00000010
    961 #define TRUST_ATTRIBUTE_WITHIN_FOREST 0x00000020
    962 #define TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL 0x00000040
    963 
    964 #if _WIN32_WINNT >= 0x0600
    965 #define TRUST_ATTRIBUTE_TRUST_USES_RC4_ENCRYPTION 0x00000080
    966 #define TRUST_ATTRIBUTE_TRUST_USES_AES_KEYS 0x00000100
    967 #endif
    968 
    969 #if _WIN32_WINNT >= 0x0602
    970 #define TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION 0x00000200
    971 #define TRUST_ATTRIBUTE_PIM_TRUST 0x00000400
    972 #endif
    973 
    974 #if _WIN32_WINNT >= 0x0603
    975 #define TRUST_ATTRIBUTE_CROSS_ORGANIZATION_ENABLE_TGT_DELEGATION 0x00000800
    976 #endif
    977 
    978 #define TRUST_ATTRIBUTES_VALID 0xFF03FFFF
    979 #define TRUST_ATTRIBUTES_USER 0xFF000000
    980 
    981   typedef struct _TRUSTED_DOMAIN_INFORMATION_EX {
    982     LSA_UNICODE_STRING Name;
    983     LSA_UNICODE_STRING FlatName;
    984     PSID Sid;
    985     ULONG TrustDirection;
    986     ULONG TrustType;
    987     ULONG TrustAttributes;
    988   } TRUSTED_DOMAIN_INFORMATION_EX,*PTRUSTED_DOMAIN_INFORMATION_EX;
    989 
    990   typedef struct _TRUSTED_DOMAIN_INFORMATION_EX2 {
    991     LSA_UNICODE_STRING Name;
    992     LSA_UNICODE_STRING FlatName;
    993     PSID Sid;
    994     ULONG TrustDirection;
    995     ULONG TrustType;
    996     ULONG TrustAttributes;
    997     ULONG ForestTrustLength;
    998     PUCHAR ForestTrustInfo;
    999   } TRUSTED_DOMAIN_INFORMATION_EX2,*PTRUSTED_DOMAIN_INFORMATION_EX2;
   1000 
   1001 #define TRUST_AUTH_TYPE_NONE 0
   1002 #define TRUST_AUTH_TYPE_NT4OWF 1
   1003 #define TRUST_AUTH_TYPE_CLEAR 2
   1004 #define TRUST_AUTH_TYPE_VERSION 3
   1005 
   1006   typedef struct _LSA_AUTH_INFORMATION {
   1007     LARGE_INTEGER LastUpdateTime;
   1008     ULONG AuthType;
   1009     ULONG AuthInfoLength;
   1010     PUCHAR AuthInfo;
   1011   } LSA_AUTH_INFORMATION,*PLSA_AUTH_INFORMATION;
   1012 
   1013   typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION {
   1014     ULONG IncomingAuthInfos;
   1015     PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
   1016     PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
   1017     ULONG OutgoingAuthInfos;
   1018     PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
   1019     PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
   1020   } TRUSTED_DOMAIN_AUTH_INFORMATION,*PTRUSTED_DOMAIN_AUTH_INFORMATION;
   1021 
   1022   typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION {
   1023     TRUSTED_DOMAIN_INFORMATION_EX Information;
   1024     TRUSTED_POSIX_OFFSET_INFO PosixOffset;
   1025     TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
   1026   } TRUSTED_DOMAIN_FULL_INFORMATION,*PTRUSTED_DOMAIN_FULL_INFORMATION;
   1027 
   1028   typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION2 {
   1029     TRUSTED_DOMAIN_INFORMATION_EX2 Information;
   1030     TRUSTED_POSIX_OFFSET_INFO PosixOffset;
   1031     TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
   1032   } TRUSTED_DOMAIN_FULL_INFORMATION2,*PTRUSTED_DOMAIN_FULL_INFORMATION2;
   1033 
   1034   typedef struct _TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
   1035     ULONG SupportedEncryptionTypes;
   1036   } TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES,*PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES;
   1037 
   1038   typedef enum {
   1039     ForestTrustTopLevelName,
   1040     ForestTrustTopLevelNameEx,
   1041     ForestTrustDomainInfo,
   1042     ForestTrustBinaryInfo,
   1043     ForestTrustScannerInfo,
   1044     ForestTrustRecordTypeLast = ForestTrustScannerInfo
   1045   } LSA_FOREST_TRUST_RECORD_TYPE;
   1046 
   1047 #define LSA_FTRECORD_DISABLED_REASONS (__MSABI_LONG(0x0000FFFF))
   1048 
   1049 #define LSA_TLN_DISABLED_NEW (__MSABI_LONG(0x00000001))
   1050 #define LSA_TLN_DISABLED_ADMIN (__MSABI_LONG(0x00000002))
   1051 #define LSA_TLN_DISABLED_CONFLICT (__MSABI_LONG(0x00000004))
   1052 
   1053 #define LSA_SID_DISABLED_ADMIN (__MSABI_LONG(0x00000001))
   1054 #define LSA_SID_DISABLED_CONFLICT (__MSABI_LONG(0x00000002))
   1055 #define LSA_NB_DISABLED_ADMIN (__MSABI_LONG(0x00000004))
   1056 #define LSA_NB_DISABLED_CONFLICT (__MSABI_LONG(0x00000008))
   1057 
   1058 #define LSA_SCANNER_INFO_DISABLE_AUTH_TARGET_VALIDATION (__MSABI_LONG(0x00000001))
   1059 #define LSA_SCANNER_INFO_ADMIN_ALL_FLAGS (LSA_SCANNER_INFO_DISABLE_AUTH_TARGET_VALIDATION)
   1060 
   1061   typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO {
   1062     PSID Sid;
   1063     LSA_UNICODE_STRING DnsName;
   1064     LSA_UNICODE_STRING NetbiosName;
   1065   } LSA_FOREST_TRUST_DOMAIN_INFO,*PLSA_FOREST_TRUST_DOMAIN_INFO;
   1066 
   1067   typedef struct _LSA_FOREST_TRUST_SCANNER_INFO {
   1068 #ifdef __WIDL__
   1069     [unique] PISID DomainSid;
   1070 #else
   1071     PSID DomainSid;
   1072 #endif
   1073     LSA_UNICODE_STRING DnsName;
   1074     LSA_UNICODE_STRING NetbiosName;
   1075   } LSA_FOREST_TRUST_SCANNER_INFO,*PLSA_FOREST_TRUST_SCANNER_INFO;
   1076 
   1077 #define MAX_FOREST_TRUST_BINARY_DATA_SIZE (128*1024)
   1078 
   1079   typedef struct _LSA_FOREST_TRUST_BINARY_DATA {
   1080     ULONG Length;
   1081     PUCHAR Buffer;
   1082   } LSA_FOREST_TRUST_BINARY_DATA,*PLSA_FOREST_TRUST_BINARY_DATA;
   1083 
   1084   typedef struct _LSA_FOREST_TRUST_RECORD {
   1085     ULONG Flags;
   1086     LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType;
   1087     LARGE_INTEGER Time;
   1088     union {
   1089       LSA_UNICODE_STRING TopLevelName;
   1090       LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo;
   1091       LSA_FOREST_TRUST_BINARY_DATA Data;
   1092     } ForestTrustData;
   1093   } LSA_FOREST_TRUST_RECORD,*PLSA_FOREST_TRUST_RECORD;
   1094 
   1095   typedef struct _LSA_FOREST_TRUST_RECORD2 {
   1096     ULONG Flags;
   1097     LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType;
   1098     LARGE_INTEGER Time;
   1099 #ifdef __WIDL__
   1100     [switch_type(LSA_FOREST_TRUST_RECORD_TYPE), switch_is(ForestTrustType)]
   1101 #endif
   1102     union {
   1103 #ifdef __WIDL__
   1104         [case(ForestTrustTopLevelName, ForestTrustTopLevelNameEx)] LSA_UNICODE_STRING TopLevelName;
   1105         [case(ForestTrustDomainInfo)] LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo;
   1106         [case(ForestTrustBinaryInfo)] LSA_FOREST_TRUST_BINARY_DATA BinaryData;
   1107         [case(ForestTrustScannerInfo)] LSA_FOREST_TRUST_SCANNER_INFO ScannerInfo;
   1108 #else
   1109         LSA_UNICODE_STRING TopLevelName;
   1110         LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo;
   1111         LSA_FOREST_TRUST_BINARY_DATA BinaryData;
   1112         LSA_FOREST_TRUST_SCANNER_INFO ScannerInfo;
   1113 #endif
   1114     } ForestTrustData;
   1115   } LSA_FOREST_TRUST_RECORD2,*PLSA_FOREST_TRUST_RECORD2;
   1116 
   1117 #define MAX_RECORDS_IN_FOREST_TRUST_INFO 4000
   1118 
   1119   typedef struct _LSA_FOREST_TRUST_INFORMATION {
   1120     ULONG RecordCount;
   1121     PLSA_FOREST_TRUST_RECORD *Entries;
   1122   } LSA_FOREST_TRUST_INFORMATION,*PLSA_FOREST_TRUST_INFORMATION;
   1123 
   1124   typedef struct _LSA_FOREST_TRUST_INFORMATION2 {
   1125 #ifdef __WIDL__
   1126     [range(0, MAX_RECORDS_IN_FOREST_TRUST_INFO)] ULONG RecordCount;
   1127     [size_is(RecordCount)] PLSA_FOREST_TRUST_RECORD2 *Entries;
   1128 #else
   1129     ULONG RecordCount;
   1130     PLSA_FOREST_TRUST_RECORD2 *Entries;
   1131 #endif
   1132   } LSA_FOREST_TRUST_INFORMATION2,*PLSA_FOREST_TRUST_INFORMATION2;
   1133 
   1134   typedef enum {
   1135     CollisionTdo,CollisionXref,CollisionOther
   1136   } LSA_FOREST_TRUST_COLLISION_RECORD_TYPE;
   1137 
   1138   typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD {
   1139     ULONG Index;
   1140     LSA_FOREST_TRUST_COLLISION_RECORD_TYPE Type;
   1141     ULONG Flags;
   1142     LSA_UNICODE_STRING Name;
   1143   } LSA_FOREST_TRUST_COLLISION_RECORD,*PLSA_FOREST_TRUST_COLLISION_RECORD;
   1144 
   1145   typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION {
   1146     ULONG RecordCount;
   1147     PLSA_FOREST_TRUST_COLLISION_RECORD *Entries;
   1148   } LSA_FOREST_TRUST_COLLISION_INFORMATION,*PLSA_FOREST_TRUST_COLLISION_INFORMATION;
   1149 
   1150   typedef ULONG LSA_ENUMERATION_HANDLE,*PLSA_ENUMERATION_HANDLE;
   1151 
   1152   typedef struct _LSA_ENUMERATION_INFORMATION {
   1153     PSID Sid;
   1154   } LSA_ENUMERATION_INFORMATION,*PLSA_ENUMERATION_INFORMATION;
   1155 
   1156   NTSTATUS NTAPI LsaFreeMemory(PVOID Buffer);
   1157   NTSTATUS NTAPI LsaClose(LSA_HANDLE ObjectHandle);
   1158 
   1159   #if (_WIN32_WINNT >= 0x0600)
   1160   typedef struct _LSA_LAST_INTER_LOGON_INFO {
   1161     LARGE_INTEGER LastSuccessfulLogon;
   1162     LARGE_INTEGER LastFailedLogon;
   1163     ULONG FailedAttemptCountSinceLastSuccessfulLogon;
   1164   } LSA_LAST_INTER_LOGON_INFO,*PLSA_LAST_INTER_LOGON_INFO;
   1165   #endif
   1166 
   1167   typedef struct _SECURITY_LOGON_SESSION_DATA {
   1168     ULONG Size;
   1169     LUID LogonId;
   1170     LSA_UNICODE_STRING UserName;
   1171     LSA_UNICODE_STRING LogonDomain;
   1172     LSA_UNICODE_STRING AuthenticationPackage;
   1173     ULONG LogonType;
   1174     ULONG Session;
   1175     PSID Sid;
   1176     LARGE_INTEGER LogonTime;
   1177     LSA_UNICODE_STRING LogonServer;
   1178     LSA_UNICODE_STRING DnsDomainName;
   1179     LSA_UNICODE_STRING Upn;
   1180     #if (_WIN32_WINNT >= 0x0600)
   1181     ULONG UserFlags;
   1182     LSA_LAST_INTER_LOGON_INFO LastLogonInfo;
   1183     LSA_UNICODE_STRING LogonScript;
   1184     LSA_UNICODE_STRING ProfilePath;
   1185     LSA_UNICODE_STRING HomeDirectory;
   1186     LSA_UNICODE_STRING HomeDirectoryDrive;
   1187     LARGE_INTEGER LogoffTime;
   1188     LARGE_INTEGER KickOffTime;
   1189     LARGE_INTEGER PasswordLastSet;
   1190     LARGE_INTEGER PasswordCanChange;
   1191     LARGE_INTEGER PasswordMustChange;
   1192     #endif
   1193   } SECURITY_LOGON_SESSION_DATA,*PSECURITY_LOGON_SESSION_DATA;
   1194 
   1195   NTSTATUS NTAPI LsaEnumerateLogonSessions(PULONG LogonSessionCount,PLUID *LogonSessionList);
   1196   NTSTATUS NTAPI LsaGetLogonSessionData(PLUID LogonId,PSECURITY_LOGON_SESSION_DATA *ppLogonSessionData);
   1197   NTSTATUS NTAPI LsaOpenPolicy(PLSA_UNICODE_STRING SystemName,PLSA_OBJECT_ATTRIBUTES ObjectAttributes,ACCESS_MASK DesiredAccess,PLSA_HANDLE PolicyHandle);
   1198   NTSTATUS NTAPI LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_INFORMATION_CLASS InformationClass,PVOID *Buffer);
   1199   NTSTATUS NTAPI LsaSetInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_INFORMATION_CLASS InformationClass,PVOID Buffer);
   1200   NTSTATUS NTAPI LsaQueryDomainInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_DOMAIN_INFORMATION_CLASS InformationClass,PVOID *Buffer);
   1201   NTSTATUS NTAPI LsaSetDomainInformationPolicy(LSA_HANDLE PolicyHandle,POLICY_DOMAIN_INFORMATION_CLASS InformationClass,PVOID Buffer);
   1202   NTSTATUS NTAPI LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass,HANDLE NotificationEventHandle);
   1203   NTSTATUS NTAPI LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass,HANDLE NotificationEventHandle);
   1204   NTSTATUS NTAPI LsaEnumerateTrustedDomains(LSA_HANDLE PolicyHandle,PLSA_ENUMERATION_HANDLE EnumerationContext,PVOID *Buffer,ULONG PreferedMaximumLength,PULONG CountReturned);
   1205   NTSTATUS NTAPI LsaLookupNames(LSA_HANDLE PolicyHandle,ULONG Count,PLSA_UNICODE_STRING Names,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_SID *Sids);
   1206   NTSTATUS NTAPI LsaLookupNames2(LSA_HANDLE PolicyHandle,ULONG Flags,ULONG Count,PLSA_UNICODE_STRING Names,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_SID2 *Sids);
   1207   NTSTATUS NTAPI LsaLookupSids(LSA_HANDLE PolicyHandle,ULONG Count,PSID *Sids,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_NAME *Names);
   1208   NTSTATUS NTAPI LsaLookupSids2(LSA_HANDLE PolicyHandle,ULONG LookupOptions,ULONG Count,PSID *Sids,PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,PLSA_TRANSLATED_NAME *Names);
   1209   NTSTATUS NTAPI LsaSetCAPs(PLSA_UNICODE_STRING CAPDNs,ULONG CAPDNCount,ULONG Flags);
   1210   NTSTATUS NTAPI LsaGetAppliedCAPIDs(PLSA_UNICODE_STRING SystemName,PSID **CAPIDs,PULONG CAPIDCount);
   1211 
   1212   #define MAXIMUM_CAPES_PER_CAP 0x7f
   1213 
   1214   #define CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG 0x00000001
   1215   #define CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG 0x00000100
   1216   #define CENTRAL_ACCESS_POLICY_STAGED_FLAG 0x00010000
   1217   #define STAGING_FLAG(Effective) ((Effective & 0xf) << 8)
   1218 
   1219   #define CENTRAL_ACCESS_POLICY_VALID_FLAG_MASK (CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG | \
   1220                                                  CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG  | \
   1221                                                  CENTRAL_ACCESS_POLICY_STAGED_FLAG)
   1222 
   1223   #define LSASETCAPS_RELOAD_FLAG 0x00000001
   1224   #define LSASETCAPS_VALID_FLAG_MASK LSASETCAPS_RELOAD_FLAG
   1225 
   1226   typedef struct _CENTRAL_ACCESS_POLICY_ENTRY {
   1227     LSA_UNICODE_STRING Name;
   1228     LSA_UNICODE_STRING Description;
   1229     LSA_UNICODE_STRING ChangeId;
   1230     ULONG LengthAppliesTo;
   1231     PUCHAR AppliesTo;
   1232     ULONG LengthSD;
   1233     PSECURITY_DESCRIPTOR SD;
   1234     ULONG LengthStagedSD;
   1235     PSECURITY_DESCRIPTOR StagedSD;
   1236     ULONG Flags;
   1237   } CENTRAL_ACCESS_POLICY_ENTRY, *PCENTRAL_ACCESS_POLICY_ENTRY;
   1238 
   1239   typedef const CENTRAL_ACCESS_POLICY_ENTRY *PCCENTRAL_ACCESS_POLICY_ENTRY;
   1240 
   1241   typedef struct _CENTRAL_ACCESS_POLICY {
   1242     PSID CAPID;
   1243     LSA_UNICODE_STRING Name;
   1244     LSA_UNICODE_STRING Description;
   1245     LSA_UNICODE_STRING ChangeId;
   1246     ULONG Flags;
   1247     ULONG CAPECount;
   1248     PCENTRAL_ACCESS_POLICY_ENTRY *CAPEs;
   1249   } CENTRAL_ACCESS_POLICY, *PCENTRAL_ACCESS_POLICY;
   1250 
   1251   typedef const CENTRAL_ACCESS_POLICY *PCCENTRAL_ACCESS_POLICY;
   1252 
   1253   NTSTATUS NTAPI LsaQueryCAPs(PSID *CAPIDs,ULONG CAPIDCount,PCENTRAL_ACCESS_POLICY *CAPs,PULONG CAPCount);
   1254 
   1255 #define SE_INTERACTIVE_LOGON_NAME TEXT("SeInteractiveLogonRight")
   1256 #define SE_NETWORK_LOGON_NAME TEXT("SeNetworkLogonRight")
   1257 #define SE_BATCH_LOGON_NAME TEXT("SeBatchLogonRight")
   1258 #define SE_SERVICE_LOGON_NAME TEXT("SeServiceLogonRight")
   1259 #define SE_DENY_INTERACTIVE_LOGON_NAME TEXT("SeDenyInteractiveLogonRight")
   1260 #define SE_DENY_NETWORK_LOGON_NAME TEXT("SeDenyNetworkLogonRight")
   1261 #define SE_DENY_BATCH_LOGON_NAME TEXT("SeDenyBatchLogonRight")
   1262 #define SE_DENY_SERVICE_LOGON_NAME TEXT("SeDenyServiceLogonRight")
   1263 #define SE_REMOTE_INTERACTIVE_LOGON_NAME TEXT("SeRemoteInteractiveLogonRight")
   1264 #define SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME TEXT("SeDenyRemoteInteractiveLogonRight")
   1265 
   1266   NTSTATUS NTAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING UserRight,PVOID *Buffer,PULONG CountReturned);
   1267   NTSTATUS NTAPI LsaEnumerateAccountRights(LSA_HANDLE PolicyHandle,PSID AccountSid,PLSA_UNICODE_STRING *UserRights,PULONG CountOfRights);
   1268   NTSTATUS NTAPI LsaAddAccountRights(LSA_HANDLE PolicyHandle,PSID AccountSid,PLSA_UNICODE_STRING UserRights,ULONG CountOfRights);
   1269   NTSTATUS NTAPI LsaRemoveAccountRights(LSA_HANDLE PolicyHandle,PSID AccountSid,BOOLEAN AllRights,PLSA_UNICODE_STRING UserRights,ULONG CountOfRights);
   1270   NTSTATUS NTAPI LsaOpenTrustedDomainByName(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,ACCESS_MASK DesiredAccess,PLSA_HANDLE TrustedDomainHandle);
   1271   NTSTATUS NTAPI LsaQueryTrustedDomainInfo(LSA_HANDLE PolicyHandle,PSID TrustedDomainSid,TRUSTED_INFORMATION_CLASS InformationClass,PVOID *Buffer);
   1272   NTSTATUS NTAPI LsaSetTrustedDomainInformation(LSA_HANDLE PolicyHandle,PSID TrustedDomainSid,TRUSTED_INFORMATION_CLASS InformationClass,PVOID Buffer);
   1273   NTSTATUS NTAPI LsaDeleteTrustedDomain(LSA_HANDLE PolicyHandle,PSID TrustedDomainSid);
   1274   NTSTATUS NTAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,TRUSTED_INFORMATION_CLASS InformationClass,PVOID *Buffer);
   1275   NTSTATUS NTAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,TRUSTED_INFORMATION_CLASS InformationClass,PVOID Buffer);
   1276   NTSTATUS NTAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE PolicyHandle,PLSA_ENUMERATION_HANDLE EnumerationContext,PVOID *Buffer,ULONG PreferedMaximumLength,PULONG CountReturned);
   1277   NTSTATUS NTAPI LsaCreateTrustedDomainEx(LSA_HANDLE PolicyHandle,PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation,ACCESS_MASK DesiredAccess,PLSA_HANDLE TrustedDomainHandle);
   1278   NTSTATUS NTAPI LsaQueryForestTrustInformation(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo);
   1279   NTSTATUS NTAPI LsaSetForestTrustInformation(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo,BOOLEAN CheckOnly,PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo);
   1280 
   1281 #ifdef TESTING_MATCHING_ROUTINE
   1282   NTSTATUS NTAPI LsaForestTrustFindMatch(LSA_HANDLE PolicyHandle,ULONG Type,PLSA_UNICODE_STRING Name,PLSA_UNICODE_STRING *Match);
   1283 #endif
   1284 
   1285   NTSTATUS NTAPI LsaStorePrivateData(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING KeyName,PLSA_UNICODE_STRING PrivateData);
   1286   NTSTATUS NTAPI LsaRetrievePrivateData(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING KeyName,PLSA_UNICODE_STRING *PrivateData);
   1287   ULONG NTAPI LsaNtStatusToWinError(NTSTATUS Status);
   1288   NTSTATUS NTAPI LsaQueryForestTrustInformation2(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,PLSA_FOREST_TRUST_INFORMATION2 *ForestTrustInfo);
   1289   NTSTATUS NTAPI LsaSetForestTrustInformation2(LSA_HANDLE PolicyHandle,PLSA_UNICODE_STRING TrustedDomainName,LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,PLSA_FOREST_TRUST_INFORMATION2 ForestTrustInfo,BOOLEAN CheckOnly,PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo);
   1290 
   1291 #ifndef _NTLSA_IFS_
   1292 #define _NTLSA_IFS_
   1293 #endif
   1294 
   1295   enum NEGOTIATE_MESSAGES {
   1296     NegEnumPackagePrefixes = 0,
   1297     NegGetCallerName = 1,
   1298     NegTransferCredentials = 2,
   1299     NegMsgReserved1 = 3,
   1300     NegCallPackageMax
   1301   };
   1302 
   1303 #define NEGOTIATE_MAX_PREFIX 32
   1304 
   1305   typedef struct _NEGOTIATE_PACKAGE_PREFIX {
   1306     ULONG_PTR PackageId;
   1307     PVOID PackageDataA;
   1308     PVOID PackageDataW;
   1309     ULONG_PTR PrefixLen;
   1310     UCHAR Prefix[NEGOTIATE_MAX_PREFIX ];
   1311   } NEGOTIATE_PACKAGE_PREFIX,*PNEGOTIATE_PACKAGE_PREFIX;
   1312 
   1313   typedef struct _NEGOTIATE_PACKAGE_PREFIXES {
   1314     ULONG MessageType;
   1315     ULONG PrefixCount;
   1316     ULONG Offset;
   1317     ULONG Pad;
   1318   } NEGOTIATE_PACKAGE_PREFIXES,*PNEGOTIATE_PACKAGE_PREFIXES;
   1319 
   1320   typedef struct _NEGOTIATE_CALLER_NAME_REQUEST {
   1321     ULONG MessageType;
   1322     LUID LogonId;
   1323   } NEGOTIATE_CALLER_NAME_REQUEST,*PNEGOTIATE_CALLER_NAME_REQUEST;
   1324 
   1325   typedef struct _NEGOTIATE_CALLER_NAME_RESPONSE {
   1326     ULONG MessageType;
   1327     PWSTR CallerName;
   1328   } NEGOTIATE_CALLER_NAME_RESPONSE,*PNEGOTIATE_CALLER_NAME_RESPONSE;
   1329 
   1330 #ifndef _NTDEF_
   1331 #ifndef __UNICODE_STRING_DEFINED
   1332 #define __UNICODE_STRING_DEFINED
   1333   typedef LSA_UNICODE_STRING UNICODE_STRING,*PUNICODE_STRING;
   1334 #endif
   1335 #ifndef __STRING_DEFINED
   1336 #define __STRING_DEFINED
   1337   typedef LSA_STRING STRING,*PSTRING;
   1338 #endif
   1339 #endif
   1340 
   1341 #ifndef _DOMAIN_PASSWORD_INFORMATION_DEFINED
   1342 #define _DOMAIN_PASSWORD_INFORMATION_DEFINED
   1343   typedef struct _DOMAIN_PASSWORD_INFORMATION {
   1344     USHORT MinPasswordLength;
   1345     USHORT PasswordHistoryLength;
   1346     ULONG PasswordProperties;
   1347     LARGE_INTEGER MaxPasswordAge;
   1348     LARGE_INTEGER MinPasswordAge;
   1349   } DOMAIN_PASSWORD_INFORMATION,*PDOMAIN_PASSWORD_INFORMATION;
   1350 #endif
   1351 
   1352 #define DOMAIN_PASSWORD_COMPLEX __MSABI_LONG(0x00000001)
   1353 #define DOMAIN_PASSWORD_NO_ANON_CHANGE __MSABI_LONG(0x00000002)
   1354 #define DOMAIN_PASSWORD_NO_CLEAR_CHANGE __MSABI_LONG(0x00000004)
   1355 #define DOMAIN_LOCKOUT_ADMINS __MSABI_LONG(0x00000008)
   1356 #define DOMAIN_PASSWORD_STORE_CLEARTEXT __MSABI_LONG(0x00000010)
   1357 #define DOMAIN_REFUSE_PASSWORD_CHANGE __MSABI_LONG(0x00000020)
   1358 
   1359 #if _WIN32_WINNT >= 0x0502
   1360 #define DOMAIN_NO_LM_OWF_CHANGE __MSABI_LONG(0x00000040)
   1361 #endif
   1362 
   1363 #ifndef _PASSWORD_NOTIFICATION_DEFINED
   1364 #define _PASSWORD_NOTIFICATION_DEFINED
   1365   typedef NTSTATUS (*PSAM_PASSWORD_NOTIFICATION_ROUTINE)(PUNICODE_STRING UserName,ULONG RelativeId,PUNICODE_STRING NewPassword);
   1366 
   1367 #define SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE "PasswordChangeNotify"
   1368 
   1369   typedef BOOLEAN (*PSAM_INIT_NOTIFICATION_ROUTINE)();
   1370 
   1371 #define SAM_INIT_NOTIFICATION_ROUTINE "InitializeChangeNotify"
   1372 #define SAM_PASSWORD_FILTER_ROUTINE "PasswordFilter"
   1373 
   1374   typedef BOOLEAN (*PSAM_PASSWORD_FILTER_ROUTINE)(PUNICODE_STRING AccountName,PUNICODE_STRING FullName,PUNICODE_STRING Password,BOOLEAN SetOperation);
   1375 #endif
   1376 
   1377 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
   1378 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
   1379 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
   1380 
   1381 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
   1382 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
   1383 
   1384   typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
   1385     MsV1_0InteractiveLogon = 2,
   1386     MsV1_0Lm20Logon,
   1387     MsV1_0NetworkLogon,
   1388     MsV1_0SubAuthLogon,
   1389     MsV1_0WorkstationUnlockLogon = 7,
   1390     MsV1_0S4ULogon = 12,
   1391     MsV1_0VirtualLogon = 82,
   1392     MsV1_0NoElevationLogon,
   1393     MsV1_0LuidLogon
   1394   } MSV1_0_LOGON_SUBMIT_TYPE,*PMSV1_0_LOGON_SUBMIT_TYPE;
   1395 
   1396   typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
   1397     MsV1_0InteractiveProfile = 2,MsV1_0Lm20LogonProfile,MsV1_0SmartCardProfile
   1398   } MSV1_0_PROFILE_BUFFER_TYPE,*PMSV1_0_PROFILE_BUFFER_TYPE;
   1399 
   1400   typedef struct _MSV1_0_INTERACTIVE_LOGON {
   1401     MSV1_0_LOGON_SUBMIT_TYPE MessageType;
   1402     UNICODE_STRING LogonDomainName;
   1403     UNICODE_STRING UserName;
   1404     UNICODE_STRING Password;
   1405   } MSV1_0_INTERACTIVE_LOGON,*PMSV1_0_INTERACTIVE_LOGON;
   1406 
   1407   typedef struct _MSV1_0_INTERACTIVE_PROFILE {
   1408     MSV1_0_PROFILE_BUFFER_TYPE MessageType;
   1409     USHORT LogonCount;
   1410     USHORT BadPasswordCount;
   1411     LARGE_INTEGER LogonTime;
   1412     LARGE_INTEGER LogoffTime;
   1413     LARGE_INTEGER KickOffTime;
   1414     LARGE_INTEGER PasswordLastSet;
   1415     LARGE_INTEGER PasswordCanChange;
   1416     LARGE_INTEGER PasswordMustChange;
   1417     UNICODE_STRING LogonScript;
   1418     UNICODE_STRING HomeDirectory;
   1419     UNICODE_STRING FullName;
   1420     UNICODE_STRING ProfilePath;
   1421     UNICODE_STRING HomeDirectoryDrive;
   1422     UNICODE_STRING LogonServer;
   1423     ULONG UserFlags;
   1424   } MSV1_0_INTERACTIVE_PROFILE,*PMSV1_0_INTERACTIVE_PROFILE;
   1425 
   1426 #define MSV1_0_CHALLENGE_LENGTH 8
   1427 #define MSV1_0_USER_SESSION_KEY_LENGTH 16
   1428 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
   1429 
   1430 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
   1431 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
   1432 #define MSV1_0_RETURN_USER_PARAMETERS 0x08
   1433 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
   1434 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
   1435 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
   1436 
   1437 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
   1438 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
   1439 #define MSV1_0_RETURN_PROFILE_PATH 0x200
   1440 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
   1441 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
   1442 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
   1443 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
   1444 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
   1445 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
   1446 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
   1447 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
   1448 
   1449 #if _WIN32_WINNT >= 0x0600
   1450 #define MSV1_0_S4U2SELF 0x00020000
   1451 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
   1452 #endif
   1453 
   1454 #if _WIN32_WINNT >= 0x0602
   1455 #define MSV1_0_INTERNET_DOMAIN 0x00080000
   1456 #endif
   1457 
   1458 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
   1459 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
   1460 #define MSV1_0_MNS_LOGON 0x01000000
   1461 
   1462 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
   1463 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
   1464 
   1465   typedef struct _MSV1_0_LM20_LOGON {
   1466     MSV1_0_LOGON_SUBMIT_TYPE MessageType;
   1467     UNICODE_STRING LogonDomainName;
   1468     UNICODE_STRING UserName;
   1469     UNICODE_STRING Workstation;
   1470     UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
   1471     STRING CaseSensitiveChallengeResponse;
   1472     STRING CaseInsensitiveChallengeResponse;
   1473     ULONG ParameterControl;
   1474   } MSV1_0_LM20_LOGON,*PMSV1_0_LM20_LOGON;
   1475 
   1476   typedef struct _MSV1_0_SUBAUTH_LOGON{
   1477     MSV1_0_LOGON_SUBMIT_TYPE MessageType;
   1478     UNICODE_STRING LogonDomainName;
   1479     UNICODE_STRING UserName;
   1480     UNICODE_STRING Workstation;
   1481     UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
   1482     STRING AuthenticationInfo1;
   1483     STRING AuthenticationInfo2;
   1484     ULONG ParameterControl;
   1485     ULONG SubAuthPackageId;
   1486   } MSV1_0_SUBAUTH_LOGON,*PMSV1_0_SUBAUTH_LOGON;
   1487 
   1488 #if _WIN32_WINNT >= 0x0600
   1489 
   1490 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
   1491 
   1492   typedef struct _MSV1_0_S4U_LOGON {
   1493     MSV1_0_LOGON_SUBMIT_TYPE MessageType;
   1494     ULONG Flags;
   1495     UNICODE_STRING UserPrincipalName;
   1496     UNICODE_STRING DomainName;
   1497   } MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON;
   1498 
   1499 #endif
   1500 
   1501 #define LOGON_GUEST 0x01
   1502 #define LOGON_NOENCRYPTION 0x02
   1503 #define LOGON_CACHED_ACCOUNT 0x04
   1504 #define LOGON_USED_LM_PASSWORD 0x08
   1505 #define LOGON_EXTRA_SIDS 0x20
   1506 #define LOGON_SUBAUTH_SESSION_KEY 0x40
   1507 #define LOGON_SERVER_TRUST_ACCOUNT 0x80
   1508 #define LOGON_NTLMV2_ENABLED 0x100
   1509 #define LOGON_RESOURCE_GROUPS 0x200
   1510 #define LOGON_PROFILE_PATH_RETURNED 0x400
   1511 #define LOGON_NT_V2 0x800
   1512 #define LOGON_LM_V2 0x1000
   1513 #define LOGON_NTLM_V2 0x2000
   1514 
   1515 #if _WIN32_WINNT >= 0x0600
   1516 #define LOGON_OPTIMIZED 0x4000
   1517 #define LOGON_WINLOGON 0x8000
   1518 #define LOGON_PKINIT 0x10000
   1519 #define LOGON_NO_OPTIMIZED 0x20000
   1520 #endif
   1521 
   1522 #if _WIN32_WINNT >= 0x0602
   1523 #define LOGON_NO_ELEVATION 0x40000
   1524 #define LOGON_MANAGED_SERVICE 0x80000
   1525 #endif
   1526 
   1527 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
   1528 
   1529 #define LOGON_GRACE_LOGON 0x01000000
   1530 
   1531   typedef struct _MSV1_0_LM20_LOGON_PROFILE {
   1532     MSV1_0_PROFILE_BUFFER_TYPE MessageType;
   1533     LARGE_INTEGER KickOffTime;
   1534     LARGE_INTEGER LogoffTime;
   1535     ULONG UserFlags;
   1536     UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
   1537     UNICODE_STRING LogonDomainName;
   1538     UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
   1539     UNICODE_STRING LogonServer;
   1540     UNICODE_STRING UserParameters;
   1541   } MSV1_0_LM20_LOGON_PROFILE,*PMSV1_0_LM20_LOGON_PROFILE;
   1542 
   1543 #define MSV1_0_OWF_PASSWORD_LENGTH 16
   1544 #define MSV1_0_SHA_PASSWORD_LENGTH 20
   1545 #define MSV1_0_CREDENTIAL_KEY_LENGTH 20
   1546 #define MSV1_0_CRED_LM_PRESENT 0x1
   1547 #define MSV1_0_CRED_NT_PRESENT 0x2
   1548 #define MSV1_0_CRED_REMOVED 0x4
   1549 #define MSV1_0_CRED_CREDKEY_PRESENT 0x8
   1550 #define MSV1_0_CRED_SHA_PRESENT 0x10
   1551 
   1552 #define MSV1_0_CRED_VERSION 0
   1553 #define MSV1_0_CRED_VERSION_V2 2
   1554 #define MSV1_0_CRED_VERSION_V3 4
   1555 #define MSV1_0_CRED_VERSION_IUM 0xffff0001
   1556 #define MSV1_0_CRED_VERSION_REMOTE 0xffff0002
   1557 #define MSV1_0_CRED_VERSION_ARSO 0xffff0003
   1558 #define MSV1_0_CRED_VERSION_RESERVED_1 0xfffffffe
   1559 #define MSV1_0_CRED_VERSION_INVALID 0xffffffff
   1560 
   1561   typedef enum _MSV1_0_CREDENTIAL_KEY_TYPE {
   1562     InvalidCredKey,
   1563     DeprecatedIUMCredKey,
   1564     DomainUserCredKey,
   1565     LocalUserCredKey,
   1566     ExternallySuppliedCredKey
   1567   } MSV1_0_CREDENTIAL_KEY_TYPE;
   1568 
   1569   typedef struct _MSV1_0_CREDENTIAL_KEY {
   1570     UCHAR Data[MSV1_0_CREDENTIAL_KEY_LENGTH];
   1571   } MSV1_0_CREDENTIAL_KEY, *PMSV1_0_CREDENTIAL_KEY;
   1572 
   1573   typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
   1574     ULONG Version;
   1575     ULONG Flags;
   1576     UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH];
   1577     UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
   1578   } MSV1_0_SUPPLEMENTAL_CREDENTIAL,*PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
   1579 
   1580   typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL_V2 {
   1581     ULONG Version;
   1582     ULONG Flags;
   1583     UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
   1584     MSV1_0_CREDENTIAL_KEY CredentialKey;
   1585   } MSV1_0_SUPPLEMENTAL_CREDENTIAL_V2, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL_V2;
   1586 
   1587   typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL_V3 {
   1588     ULONG Version;
   1589     ULONG Flags;
   1590     MSV1_0_CREDENTIAL_KEY_TYPE CredentialKeyType;
   1591     UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
   1592     MSV1_0_CREDENTIAL_KEY CredentialKey;
   1593     UCHAR ShaPassword[MSV1_0_SHA_PASSWORD_LENGTH];
   1594   } MSV1_0_SUPPLEMENTAL_CREDENTIAL_V3, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL_V3;
   1595 
   1596   typedef struct _MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL {
   1597     ULONG Version;
   1598     ULONG EncryptedCredsSize;
   1599     UCHAR EncryptedCreds[1];
   1600   } MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL;
   1601 
   1602 #define MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL_SIZE(Creds) \
   1603   (FIELD_OFFSET(MSV1_0_IUM_SUPPLEMENTAL_CREDENTIAL, EncryptedCreds) + (Creds)->EncryptedCredsSize)
   1604 
   1605   typedef struct _MSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL {
   1606     ULONG Version;
   1607     ULONG Flags;
   1608     MSV1_0_CREDENTIAL_KEY CredentialKey;
   1609     MSV1_0_CREDENTIAL_KEY_TYPE CredentialKeyType;
   1610     ULONG EncryptedCredsSize;
   1611     UCHAR EncryptedCreds[1];
   1612   } MSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL;
   1613 
   1614 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
   1615 #define MSV1_0_NTLM3_OWF_LENGTH 16
   1616 
   1617 #define MSV1_0_MAX_NTLM3_LIFE 129600
   1618 #define MSV1_0_MAX_AVL_SIZE 64000
   1619 
   1620 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
   1621 
   1622 #if _WIN32_WINNT >= 0x0600
   1623 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
   1624 #endif
   1625 
   1626 #if _WIN32_WINNT >= 0x0601
   1627 #define MSV1_0_AV_FLAG_UNVERIFIED_TARGET 0x00000004
   1628 #endif
   1629 
   1630   typedef struct _MSV1_0_NTLM3_RESPONSE {
   1631     UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
   1632     UCHAR RespType;
   1633     UCHAR HiRespType;
   1634     USHORT Flags;
   1635     ULONG MsgWord;
   1636     ULONGLONG TimeStamp;
   1637     UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH];
   1638     ULONG AvPairsOff;
   1639     UCHAR Buffer[1];
   1640   } MSV1_0_NTLM3_RESPONSE,*PMSV1_0_NTLM3_RESPONSE;
   1641 
   1642 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
   1643 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE,AvPairsOff)
   1644 
   1645 /* MsvAvSingleHost present in MS-NLMP specifications but not in WinSDK */
   1646   typedef enum {
   1647     MsvAvEOL,
   1648     MsvAvNbComputerName,
   1649     MsvAvNbDomainName,
   1650     MsvAvDnsComputerName,
   1651     MsvAvDnsDomainName
   1652 #if _WIN32_WINNT >= 0x0501
   1653     ,MsvAvDnsTreeName
   1654     ,MsvAvFlags
   1655 #if _WIN32_WINNT >= 0x0600
   1656     ,MsvAvTimestamp
   1657     ,MsvAvRestrictions
   1658     ,MsvAvSingleHost = MsvAvRestrictions
   1659     ,MsvAvTargetName
   1660     ,MsvAvChannelBindings
   1661 #endif
   1662 #endif
   1663   } MSV1_0_AVID;
   1664 
   1665   typedef struct _MSV1_0_AV_PAIR {
   1666     USHORT AvId;
   1667     USHORT AvLen;
   1668   } MSV1_0_AV_PAIR,*PMSV1_0_AV_PAIR;
   1669 
   1670   typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE {
   1671     MsV1_0Lm20ChallengeRequest = 0,
   1672     MsV1_0Lm20GetChallengeResponse,
   1673     MsV1_0EnumerateUsers,
   1674     MsV1_0GetUserInfo,
   1675     MsV1_0ReLogonUsers,
   1676     MsV1_0ChangePassword,
   1677     MsV1_0ChangeCachedPassword,
   1678     MsV1_0GenericPassthrough,
   1679     MsV1_0CacheLogon,
   1680     MsV1_0SubAuth,
   1681     MsV1_0DeriveCredential,
   1682     MsV1_0CacheLookup,
   1683 #if _WIN32_WINNT >= 0x0501
   1684     MsV1_0SetProcessOption,
   1685 #endif
   1686 #if _WIN32_WINNT >= 0x0600
   1687     MsV1_0ConfigLocalAliases,
   1688     MsV1_0ClearCachedCredentials,
   1689 #endif
   1690 #if _WIN32_WINNT >= 0x0601
   1691     MsV1_0LookupToken,
   1692 #endif
   1693 #if _WIN32_WINNT >= 0x0602
   1694     MsV1_0ValidateAuth,
   1695     MsV1_0CacheLookupEx,
   1696     MsV1_0GetCredentialKey,
   1697     MsV1_0SetThreadOption,
   1698 #endif
   1699 #if _WIN32_WINNT >= 0x0A00
   1700     MsV1_0DecryptDpapiMasterKey,
   1701     MsV1_0GetStrongCredentialKey,
   1702     MsV1_0TransferCred,
   1703     MsV1_0ProvisionTbal,
   1704     MsV1_0DeleteTbalSecrets
   1705 #endif
   1706   } MSV1_0_PROTOCOL_MESSAGE_TYPE,*PMSV1_0_PROTOCOL_MESSAGE_TYPE;
   1707 
   1708   typedef struct _MSV1_0_CHANGEPASSWORD_REQUEST {
   1709     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
   1710     UNICODE_STRING DomainName;
   1711     UNICODE_STRING AccountName;
   1712     UNICODE_STRING OldPassword;
   1713     UNICODE_STRING NewPassword;
   1714     BOOLEAN Impersonating;
   1715   } MSV1_0_CHANGEPASSWORD_REQUEST,*PMSV1_0_CHANGEPASSWORD_REQUEST;
   1716 
   1717   typedef struct _MSV1_0_CHANGEPASSWORD_RESPONSE {
   1718     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
   1719     BOOLEAN PasswordInfoValid;
   1720     DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo;
   1721   } MSV1_0_CHANGEPASSWORD_RESPONSE,*PMSV1_0_CHANGEPASSWORD_RESPONSE;
   1722 
   1723   typedef struct _MSV1_0_PASSTHROUGH_REQUEST {
   1724     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
   1725     UNICODE_STRING DomainName;
   1726     UNICODE_STRING PackageName;
   1727     ULONG DataLength;
   1728     PUCHAR LogonData;
   1729     ULONG Pad;
   1730   } MSV1_0_PASSTHROUGH_REQUEST,*PMSV1_0_PASSTHROUGH_REQUEST;
   1731 
   1732   typedef struct _MSV1_0_PASSTHROUGH_RESPONSE {
   1733     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
   1734     ULONG Pad;
   1735     ULONG DataLength;
   1736     PUCHAR ValidationData;
   1737   } MSV1_0_PASSTHROUGH_RESPONSE,*PMSV1_0_PASSTHROUGH_RESPONSE;
   1738 
   1739   typedef struct _MSV1_0_SUBAUTH_REQUEST{
   1740     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
   1741     ULONG SubAuthPackageId;
   1742     ULONG SubAuthInfoLength;
   1743     PUCHAR SubAuthSubmitBuffer;
   1744   } MSV1_0_SUBAUTH_REQUEST,*PMSV1_0_SUBAUTH_REQUEST;
   1745 
   1746   typedef struct _MSV1_0_SUBAUTH_RESPONSE{
   1747     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
   1748     ULONG SubAuthInfoLength;
   1749     PUCHAR SubAuthReturnBuffer;
   1750   } MSV1_0_SUBAUTH_RESPONSE,*PMSV1_0_SUBAUTH_RESPONSE;
   1751 
   1752 #define RtlGenRandom SystemFunction036
   1753 #define RtlEncryptMemory SystemFunction040
   1754 #define RtlDecryptMemory SystemFunction041
   1755 
   1756   BOOLEAN WINAPI RtlGenRandom(PVOID RandomBuffer,ULONG RandomBufferLength);
   1757 
   1758 #define RTL_ENCRYPT_MEMORY_SIZE 8
   1759 #define RTL_ENCRYPT_OPTION_CROSS_PROCESS 0x01
   1760 #define RTL_ENCRYPT_OPTION_SAME_LOGON 0x02
   1761 #define RTL_ENCRYPT_OPTION_FOR_SYSTEM 0x04
   1762 
   1763   NTSTATUS WINAPI RtlEncryptMemory(PVOID Memory,ULONG MemorySize,ULONG OptionFlags);
   1764   NTSTATUS WINAPI RtlDecryptMemory(PVOID Memory,ULONG MemorySize,ULONG OptionFlags);
   1765 
   1766 #define KERBEROS_VERSION 5
   1767 #define KERBEROS_REVISION 6
   1768 
   1769 #define KERB_ETYPE_NULL 0
   1770 #define KERB_ETYPE_DES_CBC_CRC 1
   1771 #define KERB_ETYPE_DES_CBC_MD4 2
   1772 #define KERB_ETYPE_DES_CBC_MD5 3
   1773 #define KERB_ETYPE_AES128_CTS_HMAC_SHA1_96 17
   1774 #define KERB_ETYPE_AES256_CTS_HMAC_SHA1_96 18
   1775 
   1776 #define KERB_ETYPE_RC4_MD4 -128
   1777 #define KERB_ETYPE_RC4_PLAIN2 -129
   1778 #define KERB_ETYPE_RC4_LM -130
   1779 #define KERB_ETYPE_RC4_SHA -131
   1780 #define KERB_ETYPE_DES_PLAIN -132
   1781 #define KERB_ETYPE_RC4_HMAC_OLD -133
   1782 #define KERB_ETYPE_RC4_PLAIN_OLD -134
   1783 #define KERB_ETYPE_RC4_HMAC_OLD_EXP -135
   1784 #define KERB_ETYPE_RC4_PLAIN_OLD_EXP -136
   1785 #define KERB_ETYPE_RC4_PLAIN -140
   1786 #define KERB_ETYPE_RC4_PLAIN_EXP -141
   1787 #define KERB_ETYPE_AES128_CTS_HMAC_SHA1_96_PLAIN -148
   1788 #define KERB_ETYPE_AES256_CTS_HMAC_SHA1_96_PLAIN -149
   1789 
   1790 #define KERB_ETYPE_DSA_SHA1_CMS 9
   1791 #define KERB_ETYPE_RSA_MD5_CMS 10
   1792 #define KERB_ETYPE_RSA_SHA1_CMS 11
   1793 #define KERB_ETYPE_RC2_CBC_ENV 12
   1794 #define KERB_ETYPE_RSA_ENV 13
   1795 #define KERB_ETYPE_RSA_ES_OEAP_ENV 14
   1796 #define KERB_ETYPE_DES_EDE3_CBC_ENV 15
   1797 
   1798 #define KERB_ETYPE_DSA_SIGN 8
   1799 #define KERB_ETYPE_RSA_PRIV 9
   1800 #define KERB_ETYPE_RSA_PUB 10
   1801 #define KERB_ETYPE_RSA_PUB_MD5 11
   1802 #define KERB_ETYPE_RSA_PUB_SHA1 12
   1803 #define KERB_ETYPE_PKCS7_PUB 13
   1804 
   1805 #define KERB_ETYPE_DES3_CBC_MD5 5
   1806 #define KERB_ETYPE_DES3_CBC_SHA1 7
   1807 #define KERB_ETYPE_DES3_CBC_SHA1_KD 16
   1808 
   1809 #define KERB_ETYPE_DES_CBC_MD5_NT 20
   1810 #define KERB_ETYPE_RC4_HMAC_NT 23
   1811 #define KERB_ETYPE_RC4_HMAC_NT_EXP 24
   1812 
   1813 #define KERB_CHECKSUM_NONE 0
   1814 #define KERB_CHECKSUM_CRC32 1
   1815 #define KERB_CHECKSUM_MD4 2
   1816 #define KERB_CHECKSUM_KRB_DES_MAC 4
   1817 #define KERB_CHECKSUM_KRB_DES_MAC_K 5
   1818 #define KERB_CHECKSUM_MD5 7
   1819 #define KERB_CHECKSUM_MD5_DES 8
   1820 #define KERB_CHECKSUM_SHA1_NEW 14
   1821 #define KERB_CHECKSUM_HMAC_SHA1_96_AES128 15
   1822 #define KERB_CHECKSUM_HMAC_SHA1_96_AES256 16
   1823 
   1824 #define KERB_CHECKSUM_LM -130
   1825 #define KERB_CHECKSUM_SHA1 -131
   1826 #define KERB_CHECKSUM_REAL_CRC32 -132
   1827 #define KERB_CHECKSUM_DES_MAC -133
   1828 #define KERB_CHECKSUM_DES_MAC_MD5 -134
   1829 #define KERB_CHECKSUM_MD25 -135
   1830 #define KERB_CHECKSUM_RC4_MD5 -136
   1831 #define KERB_CHECKSUM_MD5_HMAC -137
   1832 #define KERB_CHECKSUM_HMAC_MD5 -138
   1833 #define KERB_CHECKSUM_SHA256 -139
   1834 #define KERB_CHECKSUM_SHA384 -140
   1835 #define KERB_CHECKSUM_SHA512 -141
   1836 #define KERB_CHECKSUM_HMAC_SHA1_96_AES128_Ki -150
   1837 #define KERB_CHECKSUM_HMAC_SHA1_96_AES256_Ki -151
   1838 
   1839 #define AUTH_REQ_ALLOW_FORWARDABLE 0x00000001
   1840 #define AUTH_REQ_ALLOW_PROXIABLE 0x00000002
   1841 #define AUTH_REQ_ALLOW_POSTDATE 0x00000004
   1842 #define AUTH_REQ_ALLOW_RENEWABLE 0x00000008
   1843 #define AUTH_REQ_ALLOW_NOADDRESS 0x00000010
   1844 #define AUTH_REQ_ALLOW_ENC_TKT_IN_SKEY 0x00000020
   1845 #define AUTH_REQ_ALLOW_VALIDATE 0x00000040
   1846 #define AUTH_REQ_VALIDATE_CLIENT 0x00000080
   1847 #define AUTH_REQ_OK_AS_DELEGATE 0x00000100
   1848 #define AUTH_REQ_PREAUTH_REQUIRED 0x00000200
   1849 #define AUTH_REQ_TRANSITIVE_TRUST 0x00000400
   1850 #define AUTH_REQ_ALLOW_S4U_DELEGATE 0x00000800
   1851 
   1852 #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)
   1853 
   1854 #define KERB_TICKET_FLAGS_reserved 0x80000000
   1855 #define KERB_TICKET_FLAGS_forwardable 0x40000000
   1856 #define KERB_TICKET_FLAGS_forwarded 0x20000000
   1857 #define KERB_TICKET_FLAGS_proxiable 0x10000000
   1858 #define KERB_TICKET_FLAGS_proxy 0x08000000
   1859 #define KERB_TICKET_FLAGS_may_postdate 0x04000000
   1860 #define KERB_TICKET_FLAGS_postdated 0x02000000
   1861 #define KERB_TICKET_FLAGS_invalid 0x01000000
   1862 #define KERB_TICKET_FLAGS_renewable 0x00800000
   1863 #define KERB_TICKET_FLAGS_initial 0x00400000
   1864 #define KERB_TICKET_FLAGS_pre_authent 0x00200000
   1865 #define KERB_TICKET_FLAGS_hw_authent 0x00100000
   1866 #define KERB_TICKET_FLAGS_ok_as_delegate 0x00040000
   1867 #define KERB_TICKET_FLAGS_name_canonicalize 0x00010000
   1868 #if _WIN32_WINNT == 0x0501
   1869 #define KERB_TICKET_FLAGS_cname_in_pa_data 0x00040000
   1870 #endif
   1871 #define KERB_TICKET_FLAGS_enc_pa_rep 0x00010000
   1872 #define KERB_TICKET_FLAGS_reserved1 0x00000001
   1873 
   1874 #define KRB_NT_UNKNOWN 0
   1875 #define KRB_NT_PRINCIPAL 1
   1876 #define KRB_NT_PRINCIPAL_AND_ID -131
   1877 #define KRB_NT_SRV_INST 2
   1878 #define KRB_NT_SRV_INST_AND_ID -132
   1879 #define KRB_NT_SRV_HST 3
   1880 #define KRB_NT_SRV_XHST 4
   1881 #define KRB_NT_UID 5
   1882 #define KRB_NT_ENTERPRISE_PRINCIPAL 10
   1883 #define KRB_NT_WELLKNOWN 11
   1884 #define KRB_NT_MS_BRANCH_ID -133
   1885 #define KRB_NT_ENT_PRINCIPAL_AND_ID -130
   1886 #define KRB_NT_MS_PRINCIPAL -128
   1887 #define KRB_NT_MS_PRINCIPAL_AND_ID -129
   1888 
   1889 #define KERB_IS_MS_PRINCIPAL(_x_) (((_x_) <= KRB_NT_MS_PRINCIPAL) || ((_x_) >= KRB_NT_ENTERPRISE_PRINCIPAL))
   1890 
   1891 #if _WIN32_WINNT >= 0x0600
   1892 #define KRB_NT_X500_PRINCIPAL 6
   1893 #endif
   1894 
   1895 #define KRB_WELLKNOWN_STRING L"WELLKNOWN"
   1896 #define KRB_ANONYMOUS_STRING L"ANONYMOUS"
   1897 
   1898 #ifndef MICROSOFT_KERBEROS_NAME_A
   1899 
   1900 #define MICROSOFT_KERBEROS_NAME_A "Kerberos"
   1901 #define MICROSOFT_KERBEROS_NAME_W L"Kerberos"
   1902 #ifdef WIN32_CHICAGO
   1903 #define MICROSOFT_KERBEROS_NAME MICROSOFT_KERBEROS_NAME_A
   1904 #else
   1905 #define MICROSOFT_KERBEROS_NAME MICROSOFT_KERBEROS_NAME_W
   1906 #endif
   1907 #endif
   1908 
   1909 #define KERB_WRAP_NO_ENCRYPT 0x80000001
   1910 
   1911   typedef enum _KERB_LOGON_SUBMIT_TYPE {
   1912     KerbInteractiveLogon = 2,
   1913     KerbSmartCardLogon = 6,
   1914     KerbWorkstationUnlockLogon = 7,
   1915     KerbSmartCardUnlockLogon = 8,
   1916     KerbProxyLogon = 9,
   1917     KerbTicketLogon = 10,
   1918     KerbTicketUnlockLogon = 11,
   1919     KerbS4ULogon = 12,
   1920 #if (_WIN32_WINNT >= 0x0600)
   1921     KerbCertificateLogon = 13,
   1922     KerbCertificateS4ULogon = 14,
   1923     KerbCertificateUnlockLogon = 15,
   1924 #endif
   1925 #if (_WIN32_WINNT >= 0x0602)
   1926     KerbNoElevationLogon = 83,
   1927     KerbLuidLogon = 84
   1928 #endif
   1929   } KERB_LOGON_SUBMIT_TYPE,*PKERB_LOGON_SUBMIT_TYPE;
   1930 
   1931   typedef struct _KERB_INTERACTIVE_LOGON {
   1932     KERB_LOGON_SUBMIT_TYPE MessageType;
   1933     UNICODE_STRING LogonDomainName;
   1934     UNICODE_STRING UserName;
   1935     UNICODE_STRING Password;
   1936   } KERB_INTERACTIVE_LOGON,*PKERB_INTERACTIVE_LOGON;
   1937 
   1938   typedef struct _KERB_INTERACTIVE_UNLOCK_LOGON {
   1939     KERB_INTERACTIVE_LOGON Logon;
   1940     LUID LogonId;
   1941   } KERB_INTERACTIVE_UNLOCK_LOGON,*PKERB_INTERACTIVE_UNLOCK_LOGON;
   1942 
   1943   typedef struct _KERB_SMART_CARD_LOGON {
   1944     KERB_LOGON_SUBMIT_TYPE MessageType;
   1945     UNICODE_STRING Pin;
   1946     ULONG CspDataLength;
   1947     PUCHAR CspData;
   1948   } KERB_SMART_CARD_LOGON,*PKERB_SMART_CARD_LOGON;
   1949 
   1950   typedef struct _KERB_SMART_CARD_UNLOCK_LOGON {
   1951     KERB_SMART_CARD_LOGON Logon;
   1952     LUID LogonId;
   1953   } KERB_SMART_CARD_UNLOCK_LOGON,*PKERB_SMART_CARD_UNLOCK_LOGON;
   1954 
   1955   typedef struct _KERB_TICKET_LOGON {
   1956     KERB_LOGON_SUBMIT_TYPE MessageType;
   1957     ULONG Flags;
   1958     ULONG ServiceTicketLength;
   1959     ULONG TicketGrantingTicketLength;
   1960     PUCHAR ServiceTicket;
   1961     PUCHAR TicketGrantingTicket;
   1962   } KERB_TICKET_LOGON,*PKERB_TICKET_LOGON;
   1963 
   1964 #define KERB_LOGON_FLAG_ALLOW_EXPIRED_TICKET 0x1
   1965 #define KERB_LOGON_FLAG_REDIRECTED 0x2
   1966 
   1967   typedef struct _KERB_TICKET_UNLOCK_LOGON {
   1968     KERB_TICKET_LOGON Logon;
   1969     LUID LogonId;
   1970   } KERB_TICKET_UNLOCK_LOGON,*PKERB_TICKET_UNLOCK_LOGON;
   1971 
   1972 #if _WIN32_WINNT >= 0x0600
   1973 #define KERB_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
   1974 #define KERB_S4U_LOGON_FLAG_IDENTIFY 0x8
   1975 #endif
   1976 
   1977   typedef struct _KERB_S4U_LOGON {
   1978     KERB_LOGON_SUBMIT_TYPE MessageType;
   1979     ULONG Flags;
   1980     UNICODE_STRING ClientUpn;
   1981     UNICODE_STRING ClientRealm;
   1982   } KERB_S4U_LOGON,*PKERB_S4U_LOGON;
   1983 
   1984   typedef enum _KERB_PROFILE_BUFFER_TYPE {
   1985     KerbInteractiveProfile = 2,KerbSmartCardProfile = 4,KerbTicketProfile = 6
   1986   } KERB_PROFILE_BUFFER_TYPE,*PKERB_PROFILE_BUFFER_TYPE;
   1987 
   1988   typedef struct _KERB_INTERACTIVE_PROFILE {
   1989     KERB_PROFILE_BUFFER_TYPE MessageType;
   1990     USHORT LogonCount;
   1991     USHORT BadPasswordCount;
   1992     LARGE_INTEGER LogonTime;
   1993     LARGE_INTEGER LogoffTime;
   1994     LARGE_INTEGER KickOffTime;
   1995     LARGE_INTEGER PasswordLastSet;
   1996     LARGE_INTEGER PasswordCanChange;
   1997     LARGE_INTEGER PasswordMustChange;
   1998     UNICODE_STRING LogonScript;
   1999     UNICODE_STRING HomeDirectory;
   2000     UNICODE_STRING FullName;
   2001     UNICODE_STRING ProfilePath;
   2002     UNICODE_STRING HomeDirectoryDrive;
   2003     UNICODE_STRING LogonServer;
   2004     ULONG UserFlags;
   2005   } KERB_INTERACTIVE_PROFILE,*PKERB_INTERACTIVE_PROFILE;
   2006 
   2007   typedef struct _KERB_SMART_CARD_PROFILE {
   2008     KERB_INTERACTIVE_PROFILE Profile;
   2009     ULONG CertificateSize;
   2010     PUCHAR CertificateData;
   2011   } KERB_SMART_CARD_PROFILE,*PKERB_SMART_CARD_PROFILE;
   2012 
   2013   typedef struct KERB_CRYPTO_KEY {
   2014     LONG KeyType;
   2015     ULONG Length;
   2016     PUCHAR Value;
   2017   } KERB_CRYPTO_KEY,*PKERB_CRYPTO_KEY;
   2018 
   2019   typedef struct KERB_CRYPTO_KEY32 {
   2020     LONG KeyType;
   2021     ULONG Length;
   2022     ULONG Offset;
   2023   } KERB_CRYPTO_KEY32,*PKERB_CRYPTO_KEY32;
   2024 
   2025   typedef struct _KERB_TICKET_PROFILE {
   2026     KERB_INTERACTIVE_PROFILE Profile;
   2027     KERB_CRYPTO_KEY SessionKey;
   2028   } KERB_TICKET_PROFILE,*PKERB_TICKET_PROFILE;
   2029 
   2030   typedef enum _KERB_PROTOCOL_MESSAGE_TYPE {
   2031     KerbDebugRequestMessage = 0,
   2032     KerbQueryTicketCacheMessage,
   2033     KerbChangeMachinePasswordMessage,
   2034     KerbVerifyPacMessage,
   2035     KerbRetrieveTicketMessage,
   2036     KerbUpdateAddressesMessage,
   2037     KerbPurgeTicketCacheMessage,
   2038     KerbChangePasswordMessage,
   2039     KerbRetrieveEncodedTicketMessage,
   2040     KerbDecryptDataMessage,
   2041     KerbAddBindingCacheEntryMessage,
   2042     KerbSetPasswordMessage,
   2043     KerbSetPasswordExMessage,
   2044 #if _WIN32_WINNT >= 0x0501
   2045     KerbVerifyCredentialsMessage,
   2046     KerbQueryTicketCacheExMessage,
   2047     KerbPurgeTicketCacheExMessage,
   2048 #endif
   2049 #if _WIN32_WINNT >= 0x0502
   2050     KerbRefreshSmartcardCredentialsMessage,
   2051     KerbAddExtraCredentialsMessage,
   2052     KerbQuerySupplementalCredentialsMessage,
   2053 #endif
   2054 #if _WIN32_WINNT >= 0x0600
   2055     KerbTransferCredentialsMessage,
   2056     KerbQueryTicketCacheEx2Message,
   2057     KerbSubmitTicketMessage,
   2058     KerbAddExtraCredentialsExMessage,
   2059 #endif
   2060 #if _WIN32_WINNT >= 0x0602
   2061     KerbQueryKdcProxyCacheMessage,
   2062     KerbPurgeKdcProxyCacheMessage,
   2063     KerbQueryTicketCacheEx3Message,
   2064     KerbCleanupMachinePkinitCredsMessage,
   2065     KerbAddBindingCacheEntryExMessage,
   2066     KerbQueryBindingCacheMessage,
   2067     KerbPurgeBindingCacheMessage,
   2068     KerbPinKdcMessage,
   2069     KerbUnpinAllKdcsMessage,
   2070     KerbQueryDomainExtendedPoliciesMessage,
   2071     KerbQueryS4U2ProxyCacheMessage
   2072 #endif
   2073 #if _WIN32_WINNT >= 0x0A00
   2074     ,KerbRetrieveKeyTabMessage
   2075     ,KerbRefreshPolicyMessage
   2076     ,KerbPrintCloudKerberosDebugMessage
   2077 #endif
   2078   } KERB_PROTOCOL_MESSAGE_TYPE,*PKERB_PROTOCOL_MESSAGE_TYPE;
   2079 
   2080   typedef struct _KERB_QUERY_TKT_CACHE_REQUEST {
   2081     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2082     LUID LogonId;
   2083   } KERB_QUERY_TKT_CACHE_REQUEST,*PKERB_QUERY_TKT_CACHE_REQUEST;
   2084 
   2085   typedef struct _KERB_TICKET_CACHE_INFO {
   2086     UNICODE_STRING ServerName;
   2087     UNICODE_STRING RealmName;
   2088     LARGE_INTEGER StartTime;
   2089     LARGE_INTEGER EndTime;
   2090     LARGE_INTEGER RenewTime;
   2091     LONG EncryptionType;
   2092     ULONG TicketFlags;
   2093   } KERB_TICKET_CACHE_INFO,*PKERB_TICKET_CACHE_INFO;
   2094 
   2095   typedef struct _KERB_TICKET_CACHE_INFO_EX {
   2096     UNICODE_STRING ClientName;
   2097     UNICODE_STRING ClientRealm;
   2098     UNICODE_STRING ServerName;
   2099     UNICODE_STRING ServerRealm;
   2100     LARGE_INTEGER StartTime;
   2101     LARGE_INTEGER EndTime;
   2102     LARGE_INTEGER RenewTime;
   2103     LONG EncryptionType;
   2104     ULONG TicketFlags;
   2105   } KERB_TICKET_CACHE_INFO_EX,*PKERB_TICKET_CACHE_INFO_EX;
   2106 
   2107   typedef struct _KERB_TICKET_CACHE_INFO_EX2 {
   2108     UNICODE_STRING ClientName;
   2109     UNICODE_STRING ClientRealm;
   2110     UNICODE_STRING ServerName;
   2111     UNICODE_STRING ServerRealm;
   2112     LARGE_INTEGER StartTime;
   2113     LARGE_INTEGER EndTime;
   2114     LARGE_INTEGER RenewTime;
   2115     LONG EncryptionType;
   2116     ULONG TicketFlags;
   2117     ULONG SessionKeyType;
   2118   } KERB_TICKET_CACHE_INFO_EX2,*PKERB_TICKET_CACHE_INFO_EX2;
   2119 
   2120 #if _WIN32_WINNT >= 0x0602
   2121   typedef struct _KERB_TICKET_CACHE_INFO_EX3 {
   2122     UNICODE_STRING ClientName;
   2123     UNICODE_STRING ClientRealm;
   2124     UNICODE_STRING ServerName;
   2125     UNICODE_STRING ServerRealm;
   2126     LARGE_INTEGER StartTime;
   2127     LARGE_INTEGER EndTime;
   2128     LARGE_INTEGER RenewTime;
   2129     LONG EncryptionType;
   2130     ULONG TicketFlags;
   2131     ULONG SessionKeyType;
   2132     ULONG BranchId;
   2133     ULONG CacheFlags;
   2134     UNICODE_STRING KdcCalled;
   2135   } KERB_TICKET_CACHE_INFO_EX3, *PKERB_TICKET_CACHE_INFO_EX3;
   2136 #endif
   2137 
   2138   typedef struct _KERB_QUERY_TKT_CACHE_RESPONSE {
   2139     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2140     ULONG CountOfTickets;
   2141     KERB_TICKET_CACHE_INFO Tickets[ANYSIZE_ARRAY];
   2142   } KERB_QUERY_TKT_CACHE_RESPONSE,*PKERB_QUERY_TKT_CACHE_RESPONSE;
   2143 
   2144   typedef struct _KERB_QUERY_TKT_CACHE_EX_RESPONSE {
   2145     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2146     ULONG CountOfTickets;
   2147     KERB_TICKET_CACHE_INFO_EX Tickets[ANYSIZE_ARRAY];
   2148   } KERB_QUERY_TKT_CACHE_EX_RESPONSE,*PKERB_QUERY_TKT_CACHE_EX_RESPONSE;
   2149 
   2150   typedef struct _KERB_QUERY_TKT_CACHE_EX2_RESPONSE {
   2151     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2152     ULONG CountOfTickets;
   2153     KERB_TICKET_CACHE_INFO_EX2 Tickets[ANYSIZE_ARRAY];
   2154   } KERB_QUERY_TKT_CACHE_EX2_RESPONSE,*PKERB_QUERY_TKT_CACHE_EX2_RESPONSE;
   2155 
   2156 #if _WIN32_WINNT >= 0x0602
   2157   typedef struct _KERB_QUERY_TKT_CACHE_EX3_RESPONSE {
   2158     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2159     ULONG CountOfTickets;
   2160     KERB_TICKET_CACHE_INFO_EX3 Tickets[ANYSIZE_ARRAY];
   2161   } KERB_QUERY_TKT_CACHE_EX3_RESPONSE, *PKERB_QUERY_TKT_CACHE_EX3_RESPONSE;
   2162 #endif
   2163 
   2164 #ifndef __SECHANDLE_DEFINED__
   2165   typedef struct _SecHandle {
   2166     ULONG_PTR dwLower;
   2167     ULONG_PTR dwUpper;
   2168   } SecHandle,*PSecHandle;
   2169 
   2170 #define __SECHANDLE_DEFINED__
   2171 #endif
   2172 
   2173 #define KERB_USE_DEFAULT_TICKET_FLAGS 0x0
   2174 
   2175 #define KERB_RETRIEVE_TICKET_DEFAULT 0x0
   2176 #define KERB_RETRIEVE_TICKET_DONT_USE_CACHE 0x1
   2177 #define KERB_RETRIEVE_TICKET_USE_CACHE_ONLY 0x2
   2178 #define KERB_RETRIEVE_TICKET_USE_CREDHANDLE 0x4
   2179 #define KERB_RETRIEVE_TICKET_AS_KERB_CRED 0x8
   2180 #define KERB_RETRIEVE_TICKET_WITH_SEC_CRED 0x10
   2181 
   2182 #if _WIN32_WINNT >= 0x0600
   2183 #define KERB_RETRIEVE_TICKET_CACHE_TICKET 0x20
   2184 #endif
   2185 
   2186 #if _WIN32_WINNT >= 0x0601
   2187 #define KERB_RETRIEVE_TICKET_MAX_LIFETIME 0x40
   2188 #endif
   2189 
   2190 #define KERB_ETYPE_DEFAULT 0x0
   2191 
   2192   typedef struct _KERB_AUTH_DATA {
   2193     ULONG Type;
   2194     ULONG Length;
   2195     PUCHAR Data;
   2196   } KERB_AUTH_DATA,*PKERB_AUTH_DATA;
   2197 
   2198   typedef struct _KERB_NET_ADDRESS {
   2199     ULONG Family;
   2200     ULONG Length;
   2201     PCHAR Address;
   2202   } KERB_NET_ADDRESS,*PKERB_NET_ADDRESS;
   2203 
   2204   typedef struct _KERB_NET_ADDRESSES {
   2205     ULONG Number;
   2206     KERB_NET_ADDRESS Addresses[ANYSIZE_ARRAY];
   2207   } KERB_NET_ADDRESSES,*PKERB_NET_ADDRESSES;
   2208 
   2209   typedef struct _KERB_EXTERNAL_NAME {
   2210     SHORT NameType;
   2211     USHORT NameCount;
   2212     UNICODE_STRING Names[ANYSIZE_ARRAY];
   2213   } KERB_EXTERNAL_NAME,*PKERB_EXTERNAL_NAME;
   2214 
   2215   typedef struct _KERB_EXTERNAL_TICKET {
   2216     PKERB_EXTERNAL_NAME ServiceName;
   2217     PKERB_EXTERNAL_NAME TargetName;
   2218     PKERB_EXTERNAL_NAME ClientName;
   2219     UNICODE_STRING DomainName;
   2220     UNICODE_STRING TargetDomainName;
   2221     UNICODE_STRING AltTargetDomainName;
   2222     KERB_CRYPTO_KEY SessionKey;
   2223     ULONG TicketFlags;
   2224     ULONG Flags;
   2225     LARGE_INTEGER KeyExpirationTime;
   2226     LARGE_INTEGER StartTime;
   2227     LARGE_INTEGER EndTime;
   2228     LARGE_INTEGER RenewUntil;
   2229     LARGE_INTEGER TimeSkew;
   2230     ULONG EncodedTicketSize;
   2231     PUCHAR EncodedTicket;
   2232   } KERB_EXTERNAL_TICKET,*PKERB_EXTERNAL_TICKET;
   2233 
   2234   typedef struct _KERB_RETRIEVE_TKT_REQUEST {
   2235     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2236     LUID LogonId;
   2237     UNICODE_STRING TargetName;
   2238     ULONG TicketFlags;
   2239     ULONG CacheOptions;
   2240     LONG EncryptionType;
   2241     SecHandle CredentialsHandle;
   2242   } KERB_RETRIEVE_TKT_REQUEST,*PKERB_RETRIEVE_TKT_REQUEST;
   2243 
   2244   typedef struct _KERB_RETRIEVE_TKT_RESPONSE {
   2245     KERB_EXTERNAL_TICKET Ticket;
   2246   } KERB_RETRIEVE_TKT_RESPONSE,*PKERB_RETRIEVE_TKT_RESPONSE;
   2247 
   2248   typedef struct _KERB_PURGE_TKT_CACHE_REQUEST {
   2249     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2250     LUID LogonId;
   2251     UNICODE_STRING ServerName;
   2252     UNICODE_STRING RealmName;
   2253   } KERB_PURGE_TKT_CACHE_REQUEST,*PKERB_PURGE_TKT_CACHE_REQUEST;
   2254 
   2255 #define KERB_PURGE_ALL_TICKETS 1
   2256 
   2257   typedef struct _KERB_PURGE_TKT_CACHE_EX_REQUEST {
   2258     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2259     LUID LogonId;
   2260     ULONG Flags;
   2261     KERB_TICKET_CACHE_INFO_EX TicketTemplate;
   2262   } KERB_PURGE_TKT_CACHE_EX_REQUEST,*PKERB_PURGE_TKT_CACHE_EX_REQUEST;
   2263 
   2264   typedef struct _KERB_SUBMIT_TKT_REQUEST {
   2265     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2266     LUID LogonId;
   2267     ULONG Flags;
   2268     KERB_CRYPTO_KEY32 Key;
   2269     ULONG KerbCredSize;
   2270     ULONG KerbCredOffset;
   2271   } KERB_SUBMIT_TKT_REQUEST, *PKERB_SUBMIT_TKT_REQUEST;
   2272 
   2273 #if _WIN32_WINNT >= 0x0602
   2274 
   2275   typedef struct _KERB_QUERY_KDC_PROXY_CACHE_REQUEST {
   2276     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2277     ULONG Flags;
   2278     LUID LogonId;
   2279   } KERB_QUERY_KDC_PROXY_CACHE_REQUEST, *PKERB_QUERY_KDC_PROXY_CACHE_REQUEST;
   2280 
   2281   typedef struct _KDC_PROXY_CACHE_ENTRY_DATA {
   2282     ULONG64 SinceLastUsed;
   2283     UNICODE_STRING DomainName;
   2284     UNICODE_STRING ProxyServerName;
   2285     UNICODE_STRING ProxyServerVdir;
   2286     USHORT ProxyServerPort;
   2287     LUID LogonId;
   2288     UNICODE_STRING CredUserName;
   2289     UNICODE_STRING CredDomainName;
   2290     BOOLEAN GlobalCache;
   2291   } KDC_PROXY_CACHE_ENTRY_DATA, *PKDC_PROXY_CACHE_ENTRY_DATA;
   2292 
   2293   typedef struct _KERB_QUERY_KDC_PROXY_CACHE_RESPONSE {
   2294     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2295     ULONG CountOfEntries;
   2296     PKDC_PROXY_CACHE_ENTRY_DATA Entries;
   2297   } KERB_QUERY_KDC_PROXY_CACHE_RESPONSE, *PKERB_QUERY_KDC_PROXY_CACHE_RESPONSE;
   2298 
   2299   typedef struct _KERB_PURGE_KDC_PROXY_CACHE_REQUEST {
   2300     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2301     ULONG Flags;
   2302     LUID LogonId;
   2303   } KERB_PURGE_KDC_PROXY_CACHE_REQUEST, *PKERB_PURGE_KDC_PROXY_CACHE_REQUEST;
   2304 
   2305   typedef struct _KERB_PURGE_KDC_PROXY_CACHE_RESPONSE {
   2306     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2307     ULONG CountOfPurged;
   2308   } KERB_PURGE_KDC_PROXY_CACHE_RESPONSE, *PKERB_PURGE_KDC_PROXY_CACHE_RESPONSE;
   2309 
   2310 #define KERB_S4U2PROXY_CACHE_ENTRY_INFO_FLAG_NEGATIVE 0x1
   2311 
   2312   typedef struct _KERB_S4U2PROXY_CACHE_ENTRY_INFO {
   2313     UNICODE_STRING ServerName;
   2314     ULONG Flags;
   2315     NTSTATUS LastStatus;
   2316     LARGE_INTEGER  Expiry;
   2317   } KERB_S4U2PROXY_CACHE_ENTRY_INFO, *PKERB_S4U2PROXY_CACHE_ENTRY_INFO;
   2318 
   2319 #define KERB_S4U2PROXY_CRED_FLAG_NEGATIVE 0x1
   2320 
   2321   typedef struct _KERB_S4U2PROXY_CRED {
   2322     UNICODE_STRING UserName;
   2323     UNICODE_STRING DomainName;
   2324     ULONG Flags;
   2325     NTSTATUS LastStatus;
   2326     LARGE_INTEGER Expiry;
   2327     ULONG CountOfEntries;
   2328     PKERB_S4U2PROXY_CACHE_ENTRY_INFO Entries;
   2329   } KERB_S4U2PROXY_CRED, *PKERB_S4U2PROXY_CRED;
   2330 
   2331   typedef struct _KERB_QUERY_S4U2PROXY_CACHE_REQUEST {
   2332     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2333     ULONG Flags;
   2334     LUID LogonId;
   2335   } KERB_QUERY_S4U2PROXY_CACHE_REQUEST, *PKERB_QUERY_S4U2PROXY_CACHE_REQUEST;
   2336 
   2337   typedef struct _KERB_QUERY_S4U2PROXY_CACHE_RESPONSE {
   2338     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2339     ULONG CountOfCreds;
   2340     PKERB_S4U2PROXY_CRED Creds;
   2341   } KERB_QUERY_S4U2PROXY_CACHE_RESPONSE, *PKERB_QUERY_S4U2PROXY_CACHE_RESPONSE;
   2342 
   2343 #endif
   2344 
   2345 #if _WIN32_WINNT >= 0x0A00
   2346 
   2347   typedef struct _KERB_RETRIEVE_KEY_TAB_REQUEST {
   2348     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2349     ULONG Flags;
   2350     UNICODE_STRING UserName;
   2351     UNICODE_STRING DomainName;
   2352     UNICODE_STRING Password;
   2353   } KERB_RETRIEVE_KEY_TAB_REQUEST, *PKERB_RETRIEVE_KEY_TAB_REQUEST;
   2354 
   2355   typedef struct _KERB_RETRIEVE_KEY_TAB_RESPONSE {
   2356     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2357     ULONG KeyTabLength;
   2358     PUCHAR KeyTab;
   2359   } KERB_RETRIEVE_KEY_TAB_RESPONSE, *PKERB_RETRIEVE_KEY_TAB_RESPONSE;
   2360 
   2361 #define KERB_REFRESH_POLICY_KERBEROS 0x1
   2362 #define KERB_REFRESH_POLICY_KDC 0x2
   2363 
   2364   typedef struct _KERB_REFRESH_POLICY_REQUEST {
   2365     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2366     ULONG Flags;
   2367   } KERB_REFRESH_POLICY_REQUEST, *PKERB_REFRESH_POLICY_REQUEST;
   2368 
   2369   typedef struct _KERB_REFRESH_POLICY_RESPONSE {
   2370     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2371     ULONG Flags;
   2372   } KERB_REFRESH_POLICY_RESPONSE, *PKERB_REFRESH_POLICY_RESPONSE;
   2373 
   2374   typedef struct _KERB_CLOUD_KERBEROS_DEBUG_REQUEST {
   2375     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2376     LUID LogonId;
   2377   } KERB_CLOUD_KERBEROS_DEBUG_REQUEST, *PKERB_CLOUD_KERBEROS_DEBUG_REQUEST;
   2378 
   2379   typedef struct _KERB_CLOUD_KERBEROS_DEBUG_RESPONSE {
   2380     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2381     ULONG Version;
   2382     ULONG Length;
   2383     ULONG Data[ANYSIZE_ARRAY];
   2384   } KERB_CLOUD_KERBEROS_DEBUG_RESPONSE, *PKERB_CLOUD_KERBEROS_DEBUG_RESPONSE;
   2385 
   2386 #define KERB_CLOUD_KERBEROS_DEBUG_DATA_VERSION 1
   2387 
   2388   typedef struct _KERB_CLOUD_KERBEROS_DEBUG_DATA_V0 {
   2389     unsigned int EnabledByPolicy : 1;
   2390     unsigned int AsRepCallbackPresent : 1;
   2391     unsigned int AsRepCallbackUsed : 1;
   2392     unsigned int CloudReferralTgtAvailable : 1;
   2393     unsigned int SpnOracleConfigured : 1;
   2394     unsigned int KdcProxyPresent : 1;
   2395   } KERB_CLOUD_KERBEROS_DEBUG_DATA_V0, *PKERB_CLOUD_KERBEROS_DEBUG_DATA_V0;
   2396 
   2397   typedef struct _KERB_CLOUD_KERBEROS_DEBUG_DATA {
   2398     unsigned int EnabledByPolicy : 1;
   2399     unsigned int AsRepCallbackPresent : 1;
   2400     unsigned int AsRepCallbackUsed : 1;
   2401     unsigned int CloudReferralTgtAvailable : 1;
   2402     unsigned int SpnOracleConfigured : 1;
   2403     unsigned int KdcProxyPresent : 1;
   2404     unsigned int PublicKeyCredsPresent : 1;
   2405     unsigned int PasswordKeysPresent : 1;
   2406     unsigned int PasswordPresent : 1;
   2407     unsigned int AsRepSourceCred : 8;
   2408   } KERB_CLOUD_KERBEROS_DEBUG_DATA, *PKERB_CLOUD_KERBEROS_DEBUG_DATA;
   2409 
   2410 #endif /* _WIN32_WINNT >= 0x0A00 */
   2411 
   2412   typedef struct _KERB_CHANGEPASSWORD_REQUEST {
   2413     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2414     UNICODE_STRING DomainName;
   2415     UNICODE_STRING AccountName;
   2416     UNICODE_STRING OldPassword;
   2417     UNICODE_STRING NewPassword;
   2418     BOOLEAN Impersonating;
   2419   } KERB_CHANGEPASSWORD_REQUEST,*PKERB_CHANGEPASSWORD_REQUEST;
   2420 
   2421   typedef struct _KERB_SETPASSWORD_REQUEST {
   2422     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2423     LUID LogonId;
   2424     SecHandle CredentialsHandle;
   2425     ULONG Flags;
   2426     UNICODE_STRING DomainName;
   2427     UNICODE_STRING AccountName;
   2428     UNICODE_STRING Password;
   2429   } KERB_SETPASSWORD_REQUEST,*PKERB_SETPASSWORD_REQUEST;
   2430 
   2431   typedef struct _KERB_SETPASSWORD_EX_REQUEST {
   2432     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2433     LUID LogonId;
   2434     SecHandle CredentialsHandle;
   2435     ULONG Flags;
   2436     UNICODE_STRING AccountRealm;
   2437     UNICODE_STRING AccountName;
   2438     UNICODE_STRING Password;
   2439     UNICODE_STRING ClientRealm;
   2440     UNICODE_STRING ClientName;
   2441     BOOLEAN Impersonating;
   2442     UNICODE_STRING KdcAddress;
   2443     ULONG KdcAddressType;
   2444   } KERB_SETPASSWORD_EX_REQUEST,*PKERB_SETPASSWORD_EX_REQUEST;
   2445 
   2446 #define DS_UNKNOWN_ADDRESS_TYPE 0
   2447 #define KERB_SETPASS_USE_LOGONID 1
   2448 #define KERB_SETPASS_USE_CREDHANDLE 2
   2449 
   2450   typedef struct _KERB_DECRYPT_REQUEST {
   2451     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2452     LUID LogonId;
   2453     ULONG Flags;
   2454     LONG CryptoType;
   2455     LONG KeyUsage;
   2456     KERB_CRYPTO_KEY Key;
   2457     ULONG EncryptedDataSize;
   2458     ULONG InitialVectorSize;
   2459     PUCHAR InitialVector;
   2460     PUCHAR EncryptedData;
   2461   } KERB_DECRYPT_REQUEST,*PKERB_DECRYPT_REQUEST;
   2462 
   2463 #define KERB_DECRYPT_FLAG_DEFAULT_KEY 0x00000001
   2464 
   2465   typedef struct _KERB_DECRYPT_RESPONSE {
   2466     UCHAR DecryptedData[ANYSIZE_ARRAY];
   2467   } KERB_DECRYPT_RESPONSE,*PKERB_DECRYPT_RESPONSE;
   2468 
   2469   typedef struct _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST {
   2470     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2471     UNICODE_STRING RealmName;
   2472     UNICODE_STRING KdcAddress;
   2473     ULONG AddressType;
   2474   } KERB_ADD_BINDING_CACHE_ENTRY_REQUEST,*PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
   2475 
   2476   typedef struct _KERB_REFRESH_SCCRED_REQUEST {
   2477     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2478     UNICODE_STRING CredentialBlob;
   2479     LUID LogonId;
   2480     ULONG Flags;
   2481   } KERB_REFRESH_SCCRED_REQUEST,*PKERB_REFRESH_SCCRED_REQUEST;
   2482 
   2483 #define KERB_REFRESH_SCCRED_RELEASE 0x0
   2484 #define KERB_REFRESH_SCCRED_GETTGT 0x1
   2485 
   2486   typedef struct _KERB_ADD_CREDENTIALS_REQUEST {
   2487     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2488     UNICODE_STRING UserName;
   2489     UNICODE_STRING DomainName;
   2490     UNICODE_STRING Password;
   2491     LUID LogonId;
   2492     ULONG Flags;
   2493   } KERB_ADD_CREDENTIALS_REQUEST,*PKERB_ADD_CREDENTIALS_REQUEST;
   2494 
   2495 #define KERB_REQUEST_ADD_CREDENTIAL 1
   2496 #define KERB_REQUEST_REPLACE_CREDENTIAL 2
   2497 #define KERB_REQUEST_REMOVE_CREDENTIAL 4
   2498 
   2499 #if _WIN32_WINNT >= 0x0600
   2500 
   2501   typedef struct _KERB_ADD_CREDENTIALS_REQUEST_EX {
   2502     KERB_ADD_CREDENTIALS_REQUEST Credentials;
   2503     ULONG PrincipalNameCount;
   2504     UNICODE_STRING PrincipalNames[1];
   2505   } KERB_ADD_CREDENTIALS_REQUEST_EX, *PKERB_ADD_CREDENTIALS_REQUEST_EX;
   2506 
   2507 #endif
   2508 
   2509   typedef struct _KERB_TRANSFER_CRED_REQUEST {
   2510     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2511     LUID OriginLogonId;
   2512     LUID DestinationLogonId;
   2513     ULONG Flags;
   2514   } KERB_TRANSFER_CRED_REQUEST,*PKERB_TRANSFER_CRED_REQUEST;
   2515 
   2516 #define KERB_TRANSFER_CRED_WITH_TICKETS 1
   2517 #define KERB_TRANSFER_CRED_CLEANUP_CREDENTIALS 2
   2518 
   2519 #if _WIN32_WINNT >= 0x0602
   2520 
   2521   typedef struct _KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST {
   2522     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2523     LUID LogonId;
   2524   } KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST, *PKERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST;
   2525 
   2526   typedef struct _KERB_BINDING_CACHE_ENTRY_DATA {
   2527     ULONG64 DiscoveryTime;
   2528     UNICODE_STRING RealmName;
   2529     UNICODE_STRING KdcAddress;
   2530     ULONG AddressType;
   2531     ULONG Flags;
   2532     ULONG DcFlags;
   2533     ULONG CacheFlags;
   2534     UNICODE_STRING KdcName;
   2535   } KERB_BINDING_CACHE_ENTRY_DATA, *PKERB_BINDING_CACHE_ENTRY_DATA;
   2536 
   2537   typedef struct _KERB_QUERY_BINDING_CACHE_RESPONSE {
   2538     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2539     ULONG CountOfEntries;
   2540     PKERB_BINDING_CACHE_ENTRY_DATA Entries;
   2541   } KERB_QUERY_BINDING_CACHE_RESPONSE, *PKERB_QUERY_BINDING_CACHE_RESPONSE;
   2542 
   2543   typedef struct _KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST {
   2544     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2545     UNICODE_STRING RealmName;
   2546     UNICODE_STRING KdcAddress;
   2547     ULONG AddressType;
   2548     ULONG DcFlags;
   2549   } KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST, *PKERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST;
   2550 
   2551   typedef struct _KERB_QUERY_BINDING_CACHE_REQUEST {
   2552     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2553   } KERB_QUERY_BINDING_CACHE_REQUEST, *PKERB_QUERY_BINDING_CACHE_REQUEST;
   2554 
   2555   typedef struct _KERB_PURGE_BINDING_CACHE_REQUEST {
   2556     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2557   } KERB_PURGE_BINDING_CACHE_REQUEST, *PKERB_PURGE_BINDING_CACHE_REQUEST;
   2558 
   2559   typedef struct _KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST {
   2560     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2561     ULONG Flags;
   2562     UNICODE_STRING DomainName;
   2563   } KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST, *PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST;
   2564 
   2565 #define KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE_FLAG_DAC_DISABLED 1
   2566 
   2567   typedef struct _KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE {
   2568     KERB_PROTOCOL_MESSAGE_TYPE MessageType;
   2569     ULONG Flags;
   2570     ULONG ExtendedPolicies;
   2571     ULONG DsFlags;
   2572   } KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE, *PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE;
   2573 
   2574   typedef enum _KERB_CERTIFICATE_INFO_TYPE {
   2575     CertHashInfo = 1
   2576   } KERB_CERTIFICATE_INFO_TYPE, *PKERB_CERTIFICATE_INFO_TYPE;
   2577 
   2578   typedef struct _KERB_CERTIFICATE_HASHINFO {
   2579     USHORT StoreNameLength;
   2580     USHORT HashLength;
   2581   } KERB_CERTIFICATE_HASHINFO, *PKERB_CERTIFICATE_HASHINFO;
   2582 
   2583   typedef struct _KERB_CERTIFICATE_INFO {
   2584     ULONG CertInfoSize;
   2585     ULONG InfoType;
   2586   } KERB_CERTIFICATE_INFO, *PKERB_CERTIFICATE_INFO;
   2587 
   2588 #endif
   2589 
   2590 #define PER_USER_POLICY_UNCHANGED 0x00
   2591 #define PER_USER_AUDIT_SUCCESS_INCLUDE 0x01
   2592 #define PER_USER_AUDIT_SUCCESS_EXCLUDE 0x02
   2593 #define PER_USER_AUDIT_FAILURE_INCLUDE 0x04
   2594 #define PER_USER_AUDIT_FAILURE_EXCLUDE 0x08
   2595 #define PER_USER_AUDIT_NONE 0x10
   2596 
   2597 #define VALID_PER_USER_AUDIT_POLICY_FLAG (PER_USER_AUDIT_SUCCESS_INCLUDE | PER_USER_AUDIT_SUCCESS_EXCLUDE | PER_USER_AUDIT_FAILURE_INCLUDE | PER_USER_AUDIT_FAILURE_EXCLUDE | PER_USER_AUDIT_NONE)
   2598 
   2599   typedef struct _AUDIT_POLICY_INFORMATION {
   2600     GUID  AuditSubCategoryGuid;
   2601     ULONG AuditingInformation;
   2602     GUID  AuditCategoryGuid;
   2603   } AUDIT_POLICY_INFORMATION, *PAUDIT_POLICY_INFORMATION;
   2604   typedef const PAUDIT_POLICY_INFORMATION PCAUDIT_POLICY_INFORMATION, LPCAUDIT_POLICY_INFORMATION;
   2605 
   2606 #define AUDIT_SET_SYSTEM_POLICY 0x0001
   2607 #define AUDIT_QUERY_SYSTEM_POLICY 0x0002
   2608 #define AUDIT_SET_USER_POLICY 0x0004
   2609 #define AUDIT_QUERY_USER_POLICY 0x0008
   2610 #define AUDIT_ENUMERATE_USERS 0x0010
   2611 #define AUDIT_SET_MISC_POLICY 0x0020
   2612 #define AUDIT_QUERY_MISC_POLICY 0x0040
   2613 
   2614 #define AUDIT_GENERIC_ALL (STANDARD_RIGHTS_REQUIRED | AUDIT_SET_SYSTEM_POLICY | AUDIT_QUERY_SYSTEM_POLICY | \
   2615                            AUDIT_SET_USER_POLICY | AUDIT_QUERY_USER_POLICY | AUDIT_ENUMERATE_USERS | \
   2616                            AUDIT_SET_MISC_POLICY | AUDIT_QUERY_MISC_POLICY)
   2617 
   2618 #define AUDIT_GENERIC_READ (STANDARD_RIGHTS_READ | AUDIT_QUERY_SYSTEM_POLICY | AUDIT_QUERY_USER_POLICY | \
   2619                             AUDIT_ENUMERATE_USERS | AUDIT_QUERY_MISC_POLICY)
   2620 
   2621 #define AUDIT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | AUDIT_SET_USER_POLICY | AUDIT_SET_MISC_POLICY | \
   2622                              AUDIT_SET_SYSTEM_POLICY)
   2623 
   2624 #define AUDIT_GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE
   2625 
   2626   typedef struct _POLICY_AUDIT_SID_ARRAY {
   2627     ULONG UsersCount;
   2628     PSID  *UserSidArray;
   2629   } POLICY_AUDIT_SID_ARRAY, *PPOLICY_AUDIT_SID_ARRAY;
   2630 
   2631 #if _WIN32_WINNT >= 0x0600
   2632 
   2633 #define KERB_CERTIFICATE_LOGON_FLAG_CHECK_DUPLICATES 0x1
   2634 #define KERB_CERTIFICATE_LOGON_FLAG_USE_CERTIFICATE_INFO 0x2
   2635 
   2636   typedef struct _KERB_CERTIFICATE_LOGON {
   2637     KERB_LOGON_SUBMIT_TYPE MessageType;
   2638     UNICODE_STRING         DomainName;
   2639     UNICODE_STRING         UserName;
   2640     UNICODE_STRING         Pin;
   2641     ULONG                  Flags;
   2642     ULONG                  CspDataLength;
   2643     PUCHAR                 CspData;
   2644   } KERB_CERTIFICATE_LOGON, *PKERB_CERTIFICATE_LOGON;
   2645 
   2646   typedef struct _KERB_CERTIFICATE_UNLOCK_LOGON {
   2647     KERB_CERTIFICATE_LOGON Logon;
   2648     LUID                   LogonId;
   2649   } KERB_CERTIFICATE_UNLOCK_LOGON, *PKERB_CERTIFICATE_UNLOCK_LOGON;
   2650 
   2651 #define KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_DUPLICATES 0x1
   2652 #define KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
   2653 #define KERB_CERTIFICATE_S4U_LOGON_FLAG_FAIL_IF_NT_AUTH_POLICY_REQUIRED 0x4
   2654 #define KERB_CERTIFICATE_S4U_LOGON_FLAG_IDENTIFY 0x8
   2655 
   2656   typedef struct _KERB_CERTIFICATE_S4U_LOGON {
   2657     KERB_LOGON_SUBMIT_TYPE MessageType;
   2658     ULONG Flags;
   2659     UNICODE_STRING UserPrincipalName;
   2660     UNICODE_STRING DomainName;
   2661     ULONG CertificateLength;
   2662     PUCHAR Certificate;
   2663   } KERB_CERTIFICATE_S4U_LOGON, *PKERB_CERTIFICATE_S4U_LOGON;
   2664 
   2665   typedef struct _KERB_SMARTCARD_CSP_INFO {
   2666     DWORD dwCspInfoLen;
   2667     DWORD MessageType;
   2668     __C89_NAMELESS union {
   2669       PVOID   ContextInformation;
   2670       ULONG64 SpaceHolderForWow64;
   2671     };
   2672     DWORD flags;
   2673     DWORD KeySpec;
   2674     ULONG nCardNameOffset;
   2675     ULONG nReaderNameOffset;
   2676     ULONG nContainerNameOffset;
   2677     ULONG nCSPNameOffset;
   2678     TCHAR bBuffer;
   2679   } KERB_SMARTCARD_CSP_INFO, *PKERB_SMARTCARD_CSP_INFO;
   2680 
   2681 #endif
   2682 
   2683   BOOLEAN WINAPI AuditComputeEffectivePolicyBySid(
   2684     const PSID pSid,
   2685     const GUID *pSubCategoryGuids,
   2686     ULONG PolicyCount,
   2687     PAUDIT_POLICY_INFORMATION *ppAuditPolicy
   2688   );
   2689 
   2690   VOID WINAPI AuditFree(
   2691     PVOID Buffer
   2692   );
   2693 
   2694   BOOLEAN WINAPI AuditSetSystemPolicy(
   2695     PCAUDIT_POLICY_INFORMATION pAuditPolicy,
   2696     ULONG PolicyCount
   2697   );
   2698 
   2699   BOOLEAN WINAPI AuditQuerySystemPolicy(
   2700     const GUID *pSubCategoryGuids,
   2701     ULONG PolicyCount,
   2702     PAUDIT_POLICY_INFORMATION *ppAuditPolicy
   2703   );
   2704 
   2705   BOOLEAN WINAPI AuditSetPerUserPolicy(
   2706     const PSID pSid,
   2707     PCAUDIT_POLICY_INFORMATION pAuditPolicy,
   2708     ULONG PolicyCount
   2709   );
   2710 
   2711   BOOLEAN WINAPI AuditQueryPerUserPolicy(
   2712     const PSID pSid,
   2713     const GUID *pSubCategoryGuids,
   2714     ULONG PolicyCount,
   2715     PAUDIT_POLICY_INFORMATION *ppAuditPolicy
   2716   );
   2717 
   2718   BOOLEAN WINAPI AuditComputeEffectivePolicyByToken(
   2719     HANDLE hTokenHandle,
   2720     const GUID *pSubCategoryGuids,
   2721     ULONG PolicyCount,
   2722     PAUDIT_POLICY_INFORMATION *ppAuditPolicy
   2723   );
   2724 
   2725   BOOLEAN WINAPI AuditEnumerateCategories(
   2726     GUID **ppAuditCategoriesArray,
   2727     PULONG pCountReturned
   2728   );
   2729 
   2730   BOOLEAN WINAPI AuditEnumeratePerUserPolicy(
   2731     PPOLICY_AUDIT_SID_ARRAY *ppAuditSidArray
   2732   );
   2733 
   2734   BOOLEAN WINAPI AuditEnumerateSubCategories(
   2735     const GUID *pAuditCategoryGuid,
   2736     BOOLEAN bRetrieveAllSubCategories,
   2737     GUID **ppAuditSubCategoriesArray,
   2738     PULONG pCountReturned
   2739   );
   2740 
   2741   BOOLEAN WINAPI AuditLookupCategoryGuidFromCategoryId(
   2742     POLICY_AUDIT_EVENT_TYPE AuditCategoryId,
   2743     GUID *pAuditCategoryGuid
   2744   );
   2745 
   2746   BOOLEAN WINAPI AuditQuerySecurity(
   2747     SECURITY_INFORMATION SecurityInformation,
   2748     PSECURITY_DESCRIPTOR *ppSecurityDescriptor
   2749   );
   2750 
   2751 #define AuditLookupSubCategoryName __MINGW_NAME_AW(AuditLookupSubCategoryName)
   2752 #define AuditLookupCategoryName __MINGW_NAME_AW(AuditLookupCategoryName)
   2753 
   2754   BOOLEAN WINAPI AuditLookupSubCategoryNameA(
   2755     const GUID *pAuditSubCategoryGuid,
   2756     LPSTR *ppszSubCategoryName
   2757   );
   2758 
   2759   BOOLEAN WINAPI AuditLookupSubCategoryNameW(
   2760     const GUID *pAuditSubCategoryGuid,
   2761     LPWSTR *ppszSubCategoryName
   2762   );
   2763 
   2764   BOOLEAN WINAPI AuditLookupCategoryNameA(
   2765     const GUID *pAuditCategoryGuid,
   2766     LPSTR *ppszCategoryName
   2767   );
   2768 
   2769   BOOLEAN WINAPI AuditLookupCategoryNameW(
   2770     const GUID *pAuditCategoryGuid,
   2771     LPWSTR *ppszCategoryName
   2772   );
   2773 
   2774   BOOLEAN WINAPI AuditLookupCategoryIdFromCategoryGuid(
   2775     const GUID *pAuditCategoryGuid,
   2776     PPOLICY_AUDIT_EVENT_TYPE pAuditCategoryId
   2777   );
   2778 
   2779   BOOLEAN WINAPI AuditSetSecurity(
   2780     SECURITY_INFORMATION SecurityInformation,
   2781     PSECURITY_DESCRIPTOR pSecurityDescriptor
   2782   );
   2783 
   2784   BOOLEAN NTAPI AuditSetGlobalSaclW(
   2785     PCWSTR ObjectTypeName,
   2786     PACL Acl
   2787   );
   2788 
   2789   BOOLEAN NTAPI AuditSetGlobalSaclA(
   2790     PCSTR ObjectTypeName,
   2791     PACL Acl
   2792   );
   2793 
   2794 #define AuditSetGlobalSacl __MINGW_NAME_AW(AuditSetGlobalSacl)
   2795 
   2796   BOOLEAN NTAPI AuditQueryGlobalSaclW(
   2797     PCWSTR ObjectTypeName,
   2798     PACL *Acl
   2799   );
   2800 
   2801   BOOLEAN NTAPI AuditQueryGlobalSaclA(
   2802     PCSTR ObjectTypeName,
   2803     PACL *Acl
   2804   );
   2805 
   2806 #define AuditQueryGlobalSacl __MINGW_NAME_AW(AuditQueryGlobalSacl)
   2807 
   2808 #if _WIN32_WINNT >= 0x0601
   2809 
   2810 #define PKU2U_PACKAGE_NAME_A "pku2u"
   2811 #define PKU2U_PACKAGE_NAME L"pku2u"
   2812 #define PKU2U_PACKAGE_NAME_W PKU2U_PACKAGE_NAME
   2813 
   2814   typedef struct _PKU2U_CERT_BLOB {
   2815     ULONG CertOffset;
   2816     USHORT CertLength;
   2817   } PKU2U_CERT_BLOB, *PPKU2U_CERT_BLOB;
   2818 
   2819 #define PKU2U_CREDUI_CONTEXT_VERSION 0x4154414454524543
   2820 
   2821   typedef struct _PKU2U_CREDUI_CONTEXT {
   2822     ULONG64 Version;
   2823     USHORT cbHeaderLength;
   2824     ULONG cbStructureLength;
   2825     USHORT CertArrayCount;
   2826     ULONG CertArrayOffset;
   2827   } PKU2U_CREDUI_CONTEXT, *PPKU2U_CREDUI_CONTEXT;
   2828 
   2829   typedef enum _PKU2U_LOGON_SUBMIT_TYPE {
   2830     Pku2uCertificateS4ULogon = 14
   2831   } PKU2U_LOGON_SUBMIT_TYPE, *PPKU2U_LOGON_SUBMIT_TYPE;
   2832 
   2833   typedef struct _PKU2U_CERTIFICATE_S4U_LOGON {
   2834     PKU2U_LOGON_SUBMIT_TYPE MessageType;
   2835     ULONG Flags;
   2836     UNICODE_STRING UserPrincipalName;
   2837     UNICODE_STRING DomainName;
   2838     ULONG CertificateLength;
   2839     PUCHAR Certificate;
   2840   } PKU2U_CERTIFICATE_S4U_LOGON, *PPKU2U_CERTIFICATE_S4U_LOGON;
   2841 
   2842 #endif
   2843 
   2844 #ifdef __cplusplus
   2845 }
   2846 #endif
   2847 #endif