MiConvertLockedSmallPageToLarge

CHAR __fastcall MiConvertLockedSmallPageToLarge(INT64 a1, INT64 a2, CHAR a3, INT64 a4){
  __int64 v7; 
  unsigned __int64 v8; 
  char v9; 
  CHAR result; 
  if( (_DWORD)a4 )
  {
    MiSetPfnTbFlushStamp((_MMPFN *)a1, 0i64, 1ui64);
    MiSetPfnNodeBlinkHigh((_MMPFN *)a1, 0i64, 1ui64);
    *(_QWORD *)(a1 + 24) = *(_QWORD *)(a1 + 24) & 0xC000000000000000ui64 | 1;
    *(_WORD *)(a1 + 32) = 2;
    if( a1 != a2 )
      *(_BYTE *)(a1 + 34) = *(_BYTE *)(a1 + 34) & 0xF8 | 6;
  }
  v7 = *(_QWORD *)(a1 + 40);
  if( v7 < 0 )
    v7 &= ~0x8000000000000000ui64;
  *(_BYTE *)(a1 + 35) &= 0xF8u;
  *(_QWORD *)a1 = 0i64;
  *(_QWORD *)(a1 + 16) = 0i64;
  v8 = v7 & 0x8FFFFFF000000000ui64;
  *(_QWORD *)(a1 + 8) = 0i64;
  *(_QWORD *)(a1 + 24) &= ~0x4000000000000000ui64;
  *(_QWORD *)(a1 + 40) = v8;
  *(_QWORD *)(a1 + 40) = v8 | 0x1000000000i64;
  if( a1 == a2 )
    v9 = *(_BYTE *)(a1 + 39) & 0xFC | ~a3 & 3;
  else
    v9 = *(_BYTE *)(a1 + 39) & 0xFC;
  result = *(_BYTE *)(a1 + 34) & 0xEF;
  *(_BYTE *)(a1 + 39) = v9;
  *(_BYTE *)(a1 + 34) = result;
  return result;
}

Referenced by:

MiConvertSmallPageRangeToLarge
MiDeleteClusterPage