MiInsertPhysicalPteMapping

NTSTATUS __stdcall MiInsertPhysicalPteMapping(UINT64 a1, ULONG_PTR BugCheckParameter2, UINT64 ProtectionMask){
  unsigned int v4; 
  UINT64 v5; 
  unsigned __int64 v6; 
  _MI_PFN_CACHE_ATTRIBUTE v7; 
  unsigned __int64 v8; 
  _RTL_BALANCED_NODE *v9; 
  int v10; 
  __int64 v11; 
  __int64 v12; 
  int v13; 
  _MMPTE *PteBase; 
  VOID *v15; 
  unsigned __int64 *v16; 
  unsigned __int64 v17; 
  volatile signed __int32 *p_u2; 
  NTSTATUS result; 
  _MMPFN *v20; 
  unsigned __int8 v21; 
  unsigned int v22; 
  UINT64 SpinCount; 

  v4 = ProtectionMask;
  v5 = *(_QWORD *)&BugCheckParameter2;
  v7 = MiProtectionToCacheAttribute((unsigned int)ProtectionMask);
  if( v6 <= 0xFFFFFFFFFi64 && (v8 = v6, (((unsigned __int64)MmGetPfnDb()[v8].u4._bf_0 >> 50) & 1) != 0) )
  {
    v20 = &MmGetPfnDb()[v8];
    if( !v20->u3.ReferenceCount )
      MiShowBadMapper(v5, 4ui64);
    v21 = *((_BYTE *)&v20->u3 + 2);
    if( (v21 & 0xC0) == 0xC0 )
    {
      MiAssignInitialPageAttribute(v20, v7);
      v21 = *((_BYTE *)&v20->u3 + 2);
    }
    if( v21 >> 6 != v7 )
    {
      MiMakeProtectionPfnCompatible((_BYTE *)v4, v20);
      v4 = v22;
    }
  }
  else
  {
    v9 = MiLookupIoPageNode(v5);
    if( !v9 )
      KeBugCheckEx(0x1Au, (PVOID)0x61949, (PVOID)v5, (PVOID)1, 0i64);
    v4 &= 7u;
    v10 = *((unsigned __int16 *)v9[2].Children[0]->Children + (v5 & 0xFFFFFFFFFi64) - v9[1].ParentValue) >> 14;
    if( v10 )
    {
      if( v10 == 2 )
        v4 |= 0x18u;
    }
    else
    {
      v4 |= 8u;
    }
  }
  LODWORD(v11) = MiMakeValidPte((_XSTATE_CONFIGURATION *)a1, v5, v4 | 0x80000000);
  v12 = v11;
  LOBYTE(v13) = MiPteInShadowRange(a1);
  if( v13 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v12 & 1) != 0 )
    v12 |= 0x8000000000000000ui64;
  *(_QWORD *)a1 = v12;
  PteBase = MmGetPteBase();
  LODWORD(v15) = MiGetUsedPtesHandle((PSLIST_ENTRY)((__int64)((a1 << 25) - ((_QWORD)PteBase << 25)) >> 16));
  MiIncreaseUsedPtesCount(v15, (VOID *)1);
  v16 = (unsigned __int64 *)((char *)&PteBase->u.Long + ((a1 >> 9) & 0x7FFFFFFFF8i64));
  v17 = *v16;
  MiPteInShadowRange((UINT64)v16);
  LODWORD(SpinCount) = 0;
  p_u2 = (volatile signed __int32 *)&MmGetPfnDb()[(v17 >> 12) & 0xFFFFFFFFFi64].u2;
  while( _interlockedbittestandset64(p_u2, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *(__int64 *)p_u2 < 0 );
  }
  result = -1;
  *(_QWORD *)p_u2 ^= (*(_QWORD *)p_u2 ^ (*(_QWORD *)p_u2 + 1i64)) & 0x3FFFFFFFFFFFFFFFi64;
  _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
  return result;
}

Referenced by:

MiInsertViewOfPhysicalSection
MiMapLockedPagesInUserSpaceHelper