MmMapHotPatchTablePage

NTSTATUS __stdcall MmMapHotPatchTablePage(UINT64 a1, INT64 a2, INT64 a3){
  NTSTATUS SystemRegionType; 
  _MMPTE *PteBase; 
  int v8; 
  _XSTATE_CONFIGURATION *v9; 
  _MMPFN *PfnDb; 
  _MMPFN *v11; 
  UINT8 v12; 
  char v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  _MMPFN *v16; 
  unsigned __int64 v17; 
  __int64 v18; 
  __int64 bf_0; 
  char v20; 
  unsigned __int64 v21; 

  SystemRegionType = MiGetSystemRegionType(a1);
  PteBase = MmGetPteBase();
  if( SystemRegionType == 1 )
  {
    v8 = 1;
    v9 = (_XSTATE_CONFIGURATION *)(*(_QWORD *)(a3 + 288)
                                 + 8
                                 * ((__int64)(((a1 >> 9) & 0x7FFFFFFFF8i64)
                                            - 8i64
                                            * ((*(_DWORD *)(a3 + 64) >> 12)
                                             + (unsigned int)((*(_DWORD *)(a3 + 64) & 0xFFF) != 0))
                                            - ((*(_QWORD *)(a3 + 48) >> 9) & 0x7FFFFFFFF8i64)) >> 3));
  }
  else
  {
    v8 = 0;
    v9 = (_XSTATE_CONFIGURATION *)((char *)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64));
  }
  PfnDb = MmGetPfnDb();
  v11 = &PfnDb[a2];
  v12 = MiLockPageInline(v11);
  v13 = *((_BYTE *)&v11->u3 + 2) | 0x10;
  v14 = v12;
  v11->u2._bf_0 &= ~0x4000000000000000ui64;
  *((_BYTE *)&v11->u3 + 2) = v13;
  LODWORD(v15) = MiGetContainingPageTable((UINT64)v9);
  v11->u4._bf_0 ^= (v11->u4._bf_0 ^ v15) & 0xFFFFFFFFFi64;
  v16 = &PfnDb[v15];
  MiLockNestedPageAtDpcInline(v16);
  v16->u2._bf_0 ^= ((v16->u2._bf_0 + 1) ^ v16->u2._bf_0) & 0x3FFFFFFFFFFFFFFFi64;
  _InterlockedAnd64(&v16->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  v11->OriginalPte.u.Long = MiSwizzleInvalidPte(32i64);
  v11->PteLong = (unsigned __int64)v9;
  if( v8 )
  {
    bf_0 = v11->u2._bf_0;
    v11->u4._bf_0 |= 0x8000000000000000ui64;
    v20 = *(_BYTE *)(&v11->u3 + 1) & 0xF8 | 3;
    v11->u2._bf_0 = bf_0 ^ v18 & ((bf_0 - 1) ^ bf_0);
    *((_BYTE *)&v11->u3 + 2) = v20;
  }
  else
  {
    ++v11->u3.ReferenceCount;
  }
  _InterlockedAnd64(&v11->u2.Lock, v17);
  __writecr8(v14);
  if( v8 )
    LODWORD(v21) = MiMakeTransitionPte(a2, 1);
  else
    LODWORD(v21) = MiMakeValidPte(v9, a2, 536870913i64);
  v9->EnabledFeatures = v21;
  return v21;
}

Referenced by:

PsDispatchIumService