MiSplitDirectMapPage
NTSTATUS __stdcall MiSplitDirectMapPage(_SUBSECTION *Subsection, _MI_COLOR_BASE *ColorBase, UINT64 PageFrameIndex){
_MMPFN *PfnDb;
_MMPFN *v6;
signed __int32 v7;
unsigned int v8;
ULONG_PTR *v9;
UINT64 v10;
UINT64 v11;
UINT64 v12;
INT64 v13;
unsigned __int64 v14;
__int128 v15;
__m128i v16;
__int64 v17;
__int64 v18;
int v19;
__int64 v20;
__int16 v21;
_MMPFN *v22;
UINT64 v23;
_QWORD *v24;
INT64 v25;
__int64 v26;
__int64 v27;
int v28;
INT64 v30[2];
UINT64 v31[2];
__m128i v32;
_CONTROL_AREA *ControlArea;
PfnDb = MmGetPfnDb();
v6 = &PfnDb[PageFrameIndex];
v7 = ColorBase[2] & _InterlockedExchangeAdd(*(volatile signed __int32 **)ColorBase, 1u);
ControlArea = Subsection->ControlArea;
v8 = v7 | ColorBase[3];
v9 = *(ULONG_PTR **)(*(&stru_140C4DB30 + 267) + 8i64 * (Subsection->ControlArea->u1.Flags._bf_0 & 0x3FF));
for( LODWORD(v10) = MiGetPage(v9, v8, 0i64); ; LODWORD(v10) = MiGetPage(v9, v8, 0i64) )
{
v12 = v10;
if( v10 != -1i64 )
break;
MiWaitForFreePage((_MI_PARTITION *)v9, v11);
}
v13 = (INT64)&PfnDb[v10];
v14 = MiLockPageInline(v6);
MiLockNestedPageAtDpcInline((_MMPFN *)v13);
MiFinalizePageAttribute((_MMPFN *)v13, (_MI_PFN_CACHE_ATTRIBUTE)(*((unsigned __int8 *)&v6->u3 + 2) >> 6), 1ui64);
v15 = *((_OWORD *)&v6->3 + 1);
*(_LIST_ENTRY *)v30 = v6->ListEntry;
v16 = *(__m128i *)&v6->u3.ReferenceCount;
*(_OWORD *)v31 = v15;
v32 = v16;
v17 = ((unsigned __int16)Subsection->u.SubsectionFlags._bf_0 >> 1) & 0x1F;
v32.m128i_i64[1] = _mm_srli_si128(v16, 8).m128i_u64[0] & 0xFFFDFFFFFFFFFFFFui64;
v18 = MiSwizzleInvalidPte(32 * v17);
LOBYTE(v19) = MiPteInShadowRange((UINT64)v31);
if( v19 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v18 & 1) != 0 )
v18 |= v20;
v31[0] = v18;
MiCopyPfnEntryEx(v13, (INT64)v30);
*(_BYTE *)(v13 + 34) |= 0x10u;
*(_WORD *)(v13 + 32) = v21;
MiAddLockedPageCharge(v22, 1ui64);
MiDereferenceControlAreaPfnList(ControlArea, 0i64, v23, 2ui64);
MiCopyPage(v12, PageFrameIndex, 0i64, 6ui64);
*((_BYTE *)&v6->u3 + 2) = *(_BYTE *)(&v6->u3 + 1) & 0xF8 | 5;
v24 = (char *)MiMapPageInHyperSpaceWorker(v6->u4._bf_0 & 0xFFFFFFFFFi64, 0i64, 0x80000000ui64)
+ 8 * ((LODWORD(v6->PteLong) >> 3) & 0x1FF);
LODWORD(v25) = MI_READ_PTE_LOCK_FREE((INT64)v24);
LODWORD(v26) = MiUpdateTransitionPteFrame(v25, v12);
v27 = v26;
LOBYTE(v28) = MiPteInShadowRange((UINT64)v24);
if( v28 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v27 & 1) != 0 )
v27 |= 0x8000000000000000ui64;
*v24 = v27;
MiUnmapPageInHyperSpaceWorker(v24, 0x11u, 0x80000000ui64);
_InterlockedAnd64((volatile signed __int64 *)(v13 + 24), 0x7FFFFFFFFFFFFFFFui64);
_InterlockedAnd64(&v6->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v14);
return v12;
}Referenced by:
MiWalkEntireImage