HvpViewMapCleanup

CHAR __fastcall HvpViewMapCleanup(INT64 a1){
  INT64 v1; 
  bool v3; 
  unsigned __int64 v4; 
  CHAR result; 
  int v6; 
  _QWORD *v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  v1 = a1 + 40;
  v3 = (*(_BYTE *)(a1 + 48) & 1) == 0;
  v4 = *(_QWORD *)(a1 + 40);
  if( !v3 && v4 )
    v4 ^= v1;
  result = *(_BYTE *)(v1 + 8);
  v6 = result & 1;
  if( v4 )
  {
    while( 1 )
    {
      while( 1 )
      {
        while( *(_QWORD *)v4 )
        {
          v7 = (_QWORD *)v4;
          if( v6 )
            v4 ^= *(_QWORD *)v4;
          else
            v4 = *(_QWORD *)v4;
          *v7 = 0i64;
        }
        v8 = *(_QWORD *)(v4 + 8);
        if( !v8 )
          break;
        v9 = v4;
        if( v6 )
          v4 ^= v8;
        else
          v4 = *(_QWORD *)(v4 + 8);
        *(_QWORD *)(v9 + 8) = 0i64;
      }
      v10 = *(_QWORD *)(v4 + 16) & 0xFFFFFFFFFFFFFFFCui64;
      if( v6 && v10 )
        v10 ^= v4;
      HvpViewMapDeleteViewTreeNode((PPRIVILEGE_SET)v4);
      if( !v10 )
        break;
      v4 = v10;
    }
    result = *(_BYTE *)(v1 + 8);
  }
  *(_QWORD *)v1 = 0i64;
  *(_QWORD *)(v1 + 8) = 0i64;
  if( (result & 1) != 0 )
    *(_BYTE *)(v1 + 8) = 1;
  if( *(_QWORD *)a1 )
    return CmSiCloseSection(*(VOID **)a1);
  return result;
}

Referenced by:

HvHiveCleanup