SepAdtAuditThisEventByCategoryWithContext

UINT8 __stdcall SepAdtAuditThisEventByCategoryWithContext(
        UINT64 Category,
        UINT64 AuditFlag,
        _SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext){
  unsigned int v3; 
  __int64 v4; 
  char v6; 
  int v7; 
  UINT8 v8; 
  _SECURITY_SUBJECT_CONTEXT *p_SubjectContext; 
  _BYTE *ClientToken; 
  unsigned int v12; 
  __int16 v13; 
  __int16 v14; 
  unsigned int v15; 
  __m128i v16; 
  __m128i v17; 
  __int64 v18; 
  __m128i v19; 
  __m128i v20; 
  __m128i v21; 
  __m128i v22; 
  unsigned __int16 *v23; 
  __int64 v24; 
  int v25; 
  int v26; 
  unsigned int i; 
  int v28; 
  _SECURITY_SUBJECT_CONTEXT SubjectContext; 

  v3 = Category;
  v4 = (unsigned int)Category;
  v6 = AuditFlag;
  memset(&SubjectContext, 0, sizeof(SubjectContext));
  v7 = SeAuditingStateByCategory[(unsigned int)Category];
  if( !v7 )
    return 0;
  if( (v7 & (unsigned int)AuditFlag) != 0 )
    return 1;
  v8 = 0;
  if( SepTokenPolicyCounterByCategory[(unsigned int)Category] )
  {
    if( SubjectSecurityContext )
    {
      p_SubjectContext = SubjectSecurityContext;
    }
    else
    {
      p_SubjectContext = &SubjectContext;
      SeCaptureSubjectContext((INT64)&SubjectContext);
    }
    ClientToken = p_SubjectContext->ClientToken;
    if( p_SubjectContext->ClientToken || (ClientToken = p_SubjectContext->PrimaryToken) != 0i64 )
    {
      if( ClientToken[118] == 2 )
      {
        v12 = 0;
        v13 = 0;
        v14 = 0;
        v15 = 0;
        if( v3 )
        {
          if( v3 >= 8 )
          {
            v16 = 0i64;
            v17 = 0i64;
            do
            {
              v18 = v15 + 4;
              v19 = _mm_unpacklo_epi16(_mm_loadl_epi64((const __m128i *)&AdtpPerCategoryCount[v15]), (__m128i)0i64);
              v15 += 8;
              v16 = _mm_add_epi32(v19, v16);
              v20 = _mm_add_epi32(
                      _mm_unpacklo_epi16(_mm_loadl_epi64((const __m128i *)&AdtpPerCategoryCount[v18]), (__m128i)0i64),
                      v17);
              v17 = v20;
            }
            while( v15 < (v3 & 0xFFFFFFF8) );
            v21 = _mm_add_epi32(v20, v16);
            v22 = _mm_add_epi32(v21, _mm_srli_si128(v21, 8));
            v12 = _mm_cvtsi128_si32(_mm_add_epi32(v22, _mm_srli_si128(v22, 4)));
          }
          if( v15 < v3 )
          {
            v23 = (unsigned __int16 *)(0x140000000i64 + 2i64 * v15 + 13812144);
            v24 = v3 - v15;
            do
            {
              v25 = *v23++;
              v12 += v25;
              --v24;
            }
            while( v24 );
          }
        }
        v26 = AdtpPerCategoryCount[v4];
        for( i = v12 + v26; v12 < i; ++v12 )
        {
          v28 = (unsigned __int8)ClientToken[((unsigned __int64)v12 >> 1) + 88] >> (4 * (v12 & 1));
          if( (v28 & 1) != 0 )
          {
            if( (v6 & 2) != 0 )
              goto LABEL_34;
            ++v13;
          }
          if( (v28 & 4) != 0 )
          {
            if( (v6 & 0x20) != 0 )
              goto LABEL_34;
            ++v14;
          }
        }
        if( (v6 & 1) != 0 && v13 == (_WORD)v26 || (v6 & 0x10) != 0 && v14 == (_WORD)v26 )
LABEL_34:
          v8 = 1;
      }
    }
    else
    {
      SepAuditFailed(3221225596i64);
    }
    if( !SubjectSecurityContext )
      SeReleaseSubjectContext(p_SubjectContext);
  }
  return v8;
}

Referenced by:

SeAuditingAnyFileEventsWithContextEx
SeAuditingFileEventsWithContextEx
SepAdtAuditObjectAccessWithContext
SepAdtAuditThisEventWithContext