AuthzBasepDeleteSecurityAttributeValues

__int64 __fastcall AuthzBasepDeleteSecurityAttributeValues(__int64 a1, __int64 a2, _BYTE *a3, __int64 a4){
  __int16 v4; 
  __int64 v8; 
  int v9; 
  int v10; 
  unsigned __int16 v11; 
  __int64 v12; 
  int v13; 
  unsigned int v14; 
  v4 = *(_WORD *)(a2 + 16);
  v8 = 0i64;
  v9 = 0;
  *a3 = 0;
  if( *(_WORD *)(a1 + 48) == v4 )
  {
    v10 = 0;
    if( *(_DWORD *)(a2 + 24) )
    {
      while( 1 )
      {
        v11 = *(_WORD *)(a1 + 48);
        if( v11 && (v11 <= 2u || v11 == 3 || v11 == 4 || v11 == 5 || v11 == 6 || v11 == 16) )
        {
          LOBYTE(v12) = AuthzBasepFindSecurityAttributeValue((PRTL_AVL_TABLE)a1);
          v8 = v12;
        }
        else
        {
          v9 = -1073741811;
        }
        if( v9 < 0 )
          break;
        if( !v8 )
          return(unsigned int)-1073741275;
        v13 = *(_DWORD *)(v8 + 32);
        if( (v13 & 4) != 0 )
          return(unsigned int)-1073741275;
        if( (v13 & 1) != 0 )
        {
          LOBYTE(a4) = 1;
          *(_DWORD *)(v8 + 32) = v13 | 4;
          AuthzBasepAddSecurityAttributeValueToLists(a1, v8, 0i64, a4);
          ++*(_DWORD *)(a1 + 64);
        }
        else
        {
          AuthzBasepRemoveSecurityAttributeValueFromLists((_DWORD *)a1, (INT64 *)v8, 0);
          ExFreePoolWithTag((PVOID)v8, 0);
        }
        if( (unsigned int)++v10 >= *(_DWORD *)(a2 + 24) )
          goto LABEL_20;
      }
    }
    else
    {
LABEL_20:
      v14 = *(_DWORD *)(a1 + 60);
      if( v14 == *(_DWORD *)(a1 + 64) && *(_DWORD *)(a1 + 88) <= v14 )
        *a3 = 1;
    }
  }
  else
  {
    return(unsigned int)-1073741811;
  }
  return(unsigned int)v9;
}

Referenced by:

AuthzBasepDeleteSecurityAttribute