AuthzBasepGetNextValue

INT64 __fastcall AuthzBasepGetNextValue(INT64 a1, INT64 a2, INT64 a3){
  unsigned int ConstantOperand; 
  __int64 v6; 
  __int64 v7; 
  unsigned int v9; 
  INT64 v10; 
  ConstantOperand = 0;
  LODWORD(v10) = 0;
  v6 = *(unsigned int *)(a1 + 8);
  if( *(_DWORD *)(a1 + 12) == 1 )
  {
    if( *(_BYTE *)(a1 + 4) )
    {
      v9 = *(_DWORD *)(a1 + 24);
      if( (unsigned int)v6 < v9 )
      {
        ConstantOperand = AuthzBasepGetConstantOperand(
                            (CHAR *)(*(_QWORD *)(a1 + 32) + v6),
                            v9 - (unsigned int)v6,
                            a2,
                            &v10);
        if( *(_BYTE *)(a2 + 4) )
          return(unsigned int)-1073741406;
        else
          *(_DWORD *)(a1 + 8) += v10;
        return ConstantOperand;
      }
    }
    else if( !(_DWORD)v6 )
    {
      *(_DWORD *)(a1 + 8) = *(_DWORD *)(a1 + 24);
      *(_OWORD *)a2 = *(_OWORD *)a1;
      *(_OWORD *)(a2 + 16) = *(_OWORD *)(a1 + 16);
      *(_QWORD *)(a2 + 32) = *(_QWORD *)(a1 + 32);
      return ConstantOperand;
    }
    return(unsigned int)-2147483622;
  }
  if( (_DWORD)v6 || !*(_DWORD *)(a1 + 4) )
  {
    if( (unsigned int)v6 >= *(_DWORD *)(a1 + 4) )
      return(_DWORD)v6 != 0 ? -2147483622 : -1073741275;
    ConstantOperand = AuthzBasepQuerySecurityAttributeAndValues(*(_QWORD *)(a1 + 16), a2, a3);
    *(_WORD *)a2 = *(_WORD *)a1;
    *(_BYTE *)(a2 + 4) = *(_BYTE *)(a1 + 4);
    *(_DWORD *)(a2 + 24) = *(_DWORD *)(a1 + 24);
    v7 = *(_QWORD *)(a1 + 16);
    *(_QWORD *)(a2 + 32) = 0i64;
    *(_QWORD *)(a2 + 16) = v7;
    *(_DWORD *)(a2 + 12) = *(_DWORD *)(a1 + 12);
  }
  else
  {
    *(_OWORD *)a2 = *(_OWORD *)a1;
    *(_OWORD *)(a2 + 16) = *(_OWORD *)(a1 + 16);
    *(_QWORD *)(a2 + 32) = *(_QWORD *)(a1 + 32);
  }
  ++*(_DWORD *)(a1 + 8);
  return ConstantOperand;
}

Referenced by:

AuthzBasepDeviceMemberOf
AuthzBasepEvaluateSetRelationship
AuthzBasepMemberOf
AuthzBasepValueInSet