MiDecommitLargePoolVa

NTSTATUS __stdcall MiDecommitLargePoolVa(VOID *VAorProtoPte, UINT64 a2, INT64 PageCount){
  unsigned int v3; 
  __int64 v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned __int64 Long; 
  int v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 *v15; 
  NTSTATUS result; 
  __int64 v17[2]; 
  _MI_TB_FLUSH_LIST TbFlushList[2]; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 
  __int128 v22; 
  __int128 v23; 
  __int128 v24; 
  __int128 v25; 
  __int128 v26; 
  __int128 v27; 
  __int128 v28; 
  __int128 v29; 
  __int128 v30; 
  __int64 v31; 

  *(_QWORD *)TbFlushList = 0i64;
  v22 = 0i64;
  v3 = 0;
  v23 = 0i64;
  v24 = 0i64;
  v25 = 0i64;
  v26 = 0i64;
  v27 = 0i64;
  v31 = 0i64;
  v28 = 0i64;
  v29 = 0i64;
  v30 = 0i64;
  v19 = 20i64;
  v20 = 0i64;
  v21 = 0i64;
  LODWORD(v6) = MI_READ_PTE_LOCK_FREE(a2);
  v17[0] = v6;
  LODWORD(v7) = MI_READ_PTE_LOCK_FREE((INT64)v17);
  v8 = (v7 >> 12) & 0xFFFFFFFFFi64;
  MmGetPfnDb()[v8].u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = 0i64;
  LODWORD(v9) = MiGetContainingPageTable(a2);
  MiLockAndDecrementShareCount((_MMPFN *)(v10 + 48 * v9), 0i64);
  Long = ZeroPte.u.Long;
  LOBYTE(v12) = MiPteInShadowRange(a2);
  if( v12 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
    Long = ZeroPte.u.Long | 0x8000000000000000ui64;
  *(_QWORD *)a2 = Long;
  MiInsertLargeTbFlushEntry(TbFlushList, 1ui64, a2);
  if( a2 >= (unsigned __int64)MmGetPml4eBase() && a2 <= (unsigned __int64)MmGetPml4eLimit() )
  {
    v13 = (_QWORD)MmGetPteBase() << 25;
    v14 = (((((__int64)((a2 << 25) - v13) >> 16 << 25) - v13) >> 16 << 25) - v13) >> 16;
    MiReplicatePteChange((_MMPTE *)v14, (_MMPTE *)v14);
  }
  MiFlushTbList(TbFlushList);
  v15 = MiLargePageSizes;
  do
  {
    if( *v15 == PageCount )
      break;
    ++v3;
    ++v15;
  }
  while( v3 < 3 );
  result = MiFreeLargePageMemory(v8, v3, 4ui64);
  _InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 566, -PageCount);
  return result;
}

Referenced by:

MiDeleteNonPagedPoolPte