VmpInsertMemoryRange

NTSTATUS __stdcall VmpInsertMemoryRange(PEX_SPIN_LOCK SpinLock){
  UINT64 v1; 
  __int64 v2; 
  __int64 *v3; 
  __int64 v4; 
  UINT64 v5; 
  void *v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  UINT64 *v12; 
  unsigned __int64 v13; 
  NTSTATUS v14; 
  unsigned __int64 v15; 
  UINT64 *v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  unsigned __int64 v21; 
  unsigned __int64 v22; 
  UINT64 v23; 
  __int64 *v24; 
  __int64 **v25; 
  __int64 ***v26; 
  __int64 **i; 
  BOOL v28; 
  unsigned __int64 v29; 
  UINT64 v30; 
  UINT64 v31; 
  BOOL v32; 
  unsigned __int64 v33; 
  UINT64 v34; 

  v3 = *(__int64 **)(v1 + 40);
  v4 = v2;
  v5 = v1;
  v7 = 0i64;
  v8 = 0i64;
  LODWORD(v9) = VmpProcessContextLockExclusive((INT64 *)SpinLock);
  v10 = *((_QWORD *)SpinLock + 9);
  v11 = v9;
  if( v10 == -1 )
  {
    *((_QWORD *)SpinLock + 9) = v4;
  }
  else if( v10 != v4 )
  {
    v14 = -1073740007;
    goto LABEL_81;
  }
  v12 = (UINT64 *)(SpinLock + 2);
  v13 = *((_QWORD *)SpinLock + 1);
  if( (SpinLock[4] & 1) != 0 && v13 )
    v13 ^= (unsigned __int64)v12;
  while( v13 )
  {
    if( (unsigned __int64)v3[7] < *(_QWORD *)(v13 + 24) )
    {
      v15 = *(_QWORD *)v13;
    }
    else
    {
      if( (unsigned __int64)v3[6] <= *(_QWORD *)(v13 + 32) )
        goto LABEL_21;
      v15 = *(_QWORD *)(v13 + 8);
    }
    if( (SpinLock[4] & 1) != 0 && v15 )
      v13 ^= v15;
    else
      v13 = v15;
  }
  v16 = (UINT64 *)(SpinLock + 6);
  v17 = *((_QWORD *)SpinLock + 3);
  if( (SpinLock[8] & 1) != 0 && v17 )
    v17 ^= (unsigned __int64)v16;
  if( !v17 )
  {
LABEL_33:
    v23 = *v12;
    if( (SpinLock[4] & 1) != 0 && v23 )
      v23 ^= (unsigned __int64)v12;
    v28 = 0;
    if( v23 )
    {
      v29 = v3[6];
      while( 1 )
      {
        if( v29 > *(_QWORD *)(v23 + 32) || v29 >= *(_QWORD *)(v23 + 24) )
        {
          v30 = *(_QWORD *)(v23 + 8);
          if( (SpinLock[4] & 1) != 0 )
          {
            if( !v30 )
              goto LABEL_59;
            v30 ^= v23;
          }
          if( !v30 )
          {
LABEL_59:
            v28 = 1;
            break;
          }
        }
        else
        {
          v30 = *(_QWORD *)v23;
          if( (SpinLock[4] & 1) != 0 )
          {
            if( !v30 )
              goto LABEL_53;
            v30 ^= v23;
          }
          if( !v30 )
          {
LABEL_53:
            v28 = 0;
            break;
          }
        }
        v23 = v30;
      }
    }
    RtlRbInsertNodeEx((UINT64 *)SpinLock + 1, v23, v28, (UINT64)(v3 + 3));
    if( !v8 )
    {
      v31 = *v16;
      if( (SpinLock[8] & 1) != 0 && v31 )
        v31 ^= (unsigned __int64)v16;
      v32 = 0;
      if( v31 )
      {
        v33 = *(_QWORD *)(v5 + 24);
        while( 1 )
        {
          if( v33 > *(_QWORD *)(v31 + 32) || v33 >= *(_QWORD *)(v31 + 24) )
          {
            v34 = *(_QWORD *)(v31 + 8);
            if( (SpinLock[8] & 1) != 0 )
            {
              if( !v34 )
                goto LABEL_78;
              v34 ^= v31;
            }
            if( !v34 )
            {
LABEL_78:
              v32 = 1;
              break;
            }
          }
          else
          {
            v34 = *(_QWORD *)v31;
            if( (SpinLock[8] & 1) != 0 )
            {
              if( !v34 )
                goto LABEL_72;
              v34 ^= v31;
            }
            if( !v34 )
            {
LABEL_72:
              v32 = 0;
              break;
            }
          }
          v31 = v34;
        }
      }
      RtlRbInsertNodeEx((UINT64 *)SpinLock + 3, v31, v32, v5);
    }
    v14 = 0;
    goto LABEL_81;
  }
  v18 = *(_QWORD *)(v5 + 32);
  while( 1 )
  {
    v19 = *(_QWORD *)(v17 + 24);
    if( v18 >= v19 )
      break;
    v22 = *(_QWORD *)v17;
LABEL_28:
    if( (SpinLock[8] & 1) != 0 && v22 )
      v17 ^= v22;
    else
      v17 = v22;
    if( !v17 )
      goto LABEL_33;
  }
  v20 = *(_QWORD *)(v5 + 24);
  v21 = *(_QWORD *)(v17 + 32);
  if( v20 > v21 )
  {
    v22 = *(_QWORD *)(v17 + 8);
    goto LABEL_28;
  }
  v8 = v17;
  if( v19 == v20 && v21 == v18 )
  {
    v24 = (__int64 *)*v3;
    v25 = (__int64 **)v3[1];
    if( *(__int64 **)(*v3 + 8) != v3 || *v25 != v3 )
      __fastfail(3u);
    *v25 = v24;
    v24[1] = (__int64)v25;
    v3[2] = v17;
    v26 = (__int64 ***)(v17 + 40);
    for( i = *v26; i != (__int64 **)v26; i = (__int64 **)*i )
    {
      if( (unsigned __int64)i[6] > v3[6] )
        break;
    }
    v7 = (void *)v5;
    *i[1] = (__int64)v3;
    v3[1] = (__int64)i[1];
    i[1] = v3;
    *v3 = (__int64)i;
    goto LABEL_33;
  }
LABEL_21:
  v14 = -1073741800;
LABEL_81:
  if( v11 != -1 )
  {
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)SpinLock);
    __writecr8((unsigned __int8)v11);
  }
  if( v7 )
    VmpFreeMemoryRanges(v7);
  return v14;
}

Referenced by:

VmCreateMemoryRange