MiInsertVad

VOID __fastcall MiInsertVad(INT64 a1, INT64 a2, CHAR a3){
  RTL_BALANCED_NODE *v3; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  LONG *v9; 
  UINT8 CurrentIrql; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  unsigned int v16; 
  int v17; 
  v3 = 0i64;
  v7 = *(unsigned int *)(a1 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 33) << 32);
  v8 = *(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32);
  if( (a3 & 1) != 0 )
  {
    if( (*(_BYTE *)(a2 + 1848) & 7) == 2 )
      v9 = &dword_140C4F4C0;
    else
      v9 = (LONG *)(a2 + 1856);
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    ExpAcquireSpinLockExclusive((INT64 *)v9, CurrentIrql);
    v9[1] = 0;
    v3 = 0i64;
  }
  else
  {
    CurrentIrql = 17;
  }
  v11 = *(_QWORD *)(a2 + 1496);
  ++*(_QWORD *)(a2 + 2024);
  *(_QWORD *)(a2 + 2016) = a1;
  if( v7 <= v11 >> 12 && (a3 & 2) == 0 )
  {
    *(_QWORD *)(a2 + 1176) += ((v7 - v8) << 12) + 4096;
    v12 = *(_QWORD *)(a2 + 1176);
    if( *(_QWORD *)(a2 + 1168) < v12 )
      *(_QWORD *)(a2 + 1168) = v12;
  }
  v13 = *(_QWORD *)(a2 + 2008);
  v14 = *(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32);
  LOBYTE(v15) = 0;
  if( v13 )
  {
    while( 1 )
    {
      if( v14 <= (*(unsigned int *)(v13 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v13 + 33) << 32))
        && v14 < (*(unsigned int *)(v13 + 24) | ((unsigned __int64)*(unsigned __int8 *)(v13 + 32) << 32)) )
      {
        v15 = *(_QWORD *)v13;
        if( !*(_QWORD *)v13 )
          break;
      }
      else
      {
        v15 = *(_QWORD *)(v13 + 8);
        if( !v15 )
        {
          LOBYTE(v15) = 1;
          break;
        }
      }
      v13 = v15;
    }
  }
  RtlAvlInsertNodeEx((unsigned __int64 *)(a2 + 2008), v13, v15, (_QWORD *)a1);
  v16 = *(_DWORD *)(a1 + 48);
  if( (v16 & 0x100000) == 0 || (v16 & 0x400000) == 0 && (v16 & 0xC0000) < 0x80000 )
  {
    if( !MiVadMapsLargeImage(a1) )
      goto LABEL_18;
    v16 = *(_DWORD *)(a1 + 48);
  }
  if( (unsigned __int64)MiVadPageSizes[((unsigned __int64)v16 >> 18) & 3] >= 0x200 )
    ++*(_DWORD *)(a2 + 2140);
LABEL_18:
  v17 = *(_DWORD *)(a1 + 48);
  if( (v17 & 0x70) == 16 )
  {
    ++*(_QWORD *)(*(_QWORD *)(a2 + 1680) + 304i64);
    v17 = *(_DWORD *)(a1 + 48);
  }
  if( (v17 & 0x70) == 48 && (v17 & 0x3100000) != 34603008 )
    v3 = (RTL_BALANCED_NODE *)(MiLocateLockedVadEvent(a1, 256i64) + 1);
  if( CurrentIrql != 17 )
    MiUnlockWorkingSetExclusive(a2 + 1664, CurrentIrql);
  if( v3 )
    MiAweViewInserter(a2, v3);
}

Referenced by:

MiDeletePartialVad
MiInsertPrivateVad
MiInsertViewOfPhysicalSection
MiMapLockedPagesInUserSpaceHelper
MiReInsertPlaceholderVad