SepAdtAuditPrivilegeUseWithContext

INT64 __fastcall SepAdtAuditPrivilegeUseWithContext(
        PRIVILEGE_SET *PrivilegeSet,
        INT64 AccessGranted,
        INT64 AccessDenied,
        SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
        UINT16 *FlatSubCategoryId){
  UINT8 v7; 
  UINT8 v8; 
  UINT8 v9; 
  INT64 result; 
  char v11; 
  SECURITY_SUBJECT_CONTEXT *p_SubjectContext; 
  void *ClientToken; 
  SECURITY_SUBJECT_CONTEXT *v14; 
  void *PrimaryToken; 
  UINT8 GenerateAudit; 
  UINT8 AtleastOneSensitivePrivilege; 
  char AtleastOneNonSensitivePrivilege[6]; 
  struct _SECURITY_SUBJECT_CONTEXT SubjectContext; 
  AtleastOneSensitivePrivilege = 0;
  AtleastOneNonSensitivePrivilege[0] = 0;
  v7 = AccessDenied;
  v8 = AccessGranted;
  memset(&SubjectContext, 0, sizeof(SubjectContext));
  v9 = SepAuditingEnabledForSubcategory(0x82ui64, AccessGranted, AccessDenied);
  GenerateAudit = v9;
  if( dword_140C1D4D8 )
  {
    if( SubjectSecurityContext )
    {
      p_SubjectContext = SubjectSecurityContext;
    }
    else
    {
      p_SubjectContext = &SubjectContext;
      SeCaptureSubjectContext(&SubjectContext);
    }
    ClientToken = p_SubjectContext->ClientToken;
    if( p_SubjectContext->ClientToken || (ClientToken = p_SubjectContext->PrimaryToken) != 0i64 )
    {
      SepAdtIncorporatePerUserPolicy(0x1Eui64, v8, v7, ClientToken, &GenerateAudit);
      v9 = GenerateAudit;
    }
    else
    {
      SepAuditFailed(3221225596i64);
    }
    if( !SubjectSecurityContext )
      SeReleaseSubjectContext(p_SubjectContext);
  }
  memset(&SubjectContext, 0, sizeof(SubjectContext));
  LODWORD(result) = SepAuditingEnabledForSubcategory(0x83ui64, v8, v7);
  v11 = result;
  GenerateAudit = result;
  if( dword_140C1D4DC )
  {
    if( SubjectSecurityContext )
    {
      v14 = SubjectSecurityContext;
    }
    else
    {
      v14 = &SubjectContext;
      SeCaptureSubjectContext(&SubjectContext);
    }
    PrimaryToken = v14->ClientToken;
    if( v14->ClientToken || (PrimaryToken = v14->PrimaryToken) != 0i64 )
    {
      SepAdtIncorporatePerUserPolicy(0x1Fui64, v8, v7, PrimaryToken, &GenerateAudit);
      v11 = GenerateAudit;
    }
    else
    {
      SepAuditFailed(3221225596i64);
    }
    if( !SubjectSecurityContext )
      SeReleaseSubjectContext(v14);
  }
  if( !v9 && !v11 || !SepFilterPrivilegeAudits(0i64, PrivilegeSet) )
    goto LABEL_5;
  if( v9 && v11 && PrivilegeSet && PrivilegeSet->PrivilegeCount
    || (SepAdtCheckPrivilegeForSensitivity(
          PrivilegeSet,
          &AtleastOneSensitivePrivilege,
          (UINT8 *)AtleastOneNonSensitivePrivilege),
        v9)
    && AtleastOneSensitivePrivilege )
  {
    LOBYTE(result) = 1;
    *FlatSubCategoryId = 130;
    return result;
  }
  if( !v11 || !AtleastOneNonSensitivePrivilege[0] )
  {
LABEL_5:
    LOBYTE(result) = 0;
    return result;
  }
  LOBYTE(result) = 1;
  *FlatSubCategoryId = 131;
  return result;
}

Referenced by:

SeOpenObjectAuditAlarmWithTransaction
SeOpenObjectForDeleteAuditAlarmWithTransaction
SepAdtPrivilegeObjectAuditAlarm
SepAdtPrivilegedServiceAuditAlarm