MiMapRetpolineStubs
NTSTATUS __stdcall MiMapRetpolineStubs(UINT64 a1, INT64 a2){
UINT64 v4;
VOID *v5;
INT64 v6;
INT16 v7;
_MMSUPPORT_INSTANCE *SessionVm;
_MMSUPPORT_INSTANCE *v9;
_MMPTE *PteBase;
UINT64 v11;
char *v12;
UINT64 v13;
__int64 v14;
char v15;
INT64 v16;
unsigned __int64 *v17;
INT64 v18;
__int64 v19;
unsigned __int64 v20;
int v21;
__int64 v23;
char WsIrql;
v4 = 0i64;
if( MiGetSystemRegionType(a1) == 1 )
SessionVm = MiGetSessionVm(v6, (INT64)v5, v7);
else
SessionVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeSystemViews, v5);
v9 = SessionVm;
PteBase = MmGetPteBase();
v11 = a1 + ((a2 + ((unsigned int)dword_140C4C9F0 >> 12) + ((dword_140C4C9F0 & 0xFFF) != 0)) << 12);
v12 = (char *)PteBase + ((v11 >> 9) & 0x7FFFFFFFF8i64);
v23 = qword_140C4C990;
MiLockWorkingSetShared();
v14 = 0i64;
WsIrql = v15;
if( !dword_140C4C9C8 )
goto LABEL_16;
do
{
v16 = *(_QWORD *)(v23 + 8 * v14 + 48);
v17 = (unsigned __int64 *)&v12[8 * v14];
if( !v4 )
goto LABEL_8;
if( ((unsigned __int16)v17 & 0xFFF) == 0 )
{
MiUnlockPageTableInternal((INT64)v9, v4);
LABEL_8:
v4 = (UINT64)PteBase + (((unsigned __int64)v17 >> 9) & 0x7FFFFFFFF8i64);
MiLockPageTableInternal((INT64)v9, v4, 0i64);
}
LODWORD(v18) = MiGetContainingPageTable((UINT64)&v12[8 * v14]);
MiLockAndIncrementShareCount(v18);
MiLockAndIncrementShareCount(v16);
LODWORD(v19) = MiMakeValidPte((_XSTATE_CONFIGURATION *)&v12[8 * v14], v16, 3i64);
v20 = v19 & 0xF0FFFFFFFFFFFFFFui64 | 0x900000000000000i64;
LOBYTE(v21) = MiPteInShadowRange((UINT64)&v12[8 * v14]);
if( v21 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v20 & 1) != 0 )
v20 |= 0x8000000000000000ui64;
*v17 = v20;
v14 = (unsigned int)(v14 + 1);
PteBase = MmGetPteBase();
}
while( (unsigned int)v14 < dword_140C4C9C8 );
if( v4 )
MiUnlockPageTableInternal((INT64)v9, v4);
LABEL_16:
LOBYTE(v13) = WsIrql;
MiUnlockWorkingSetShared(v9, v13);
return v11;
}Referenced by:
MiFinalizeImageRetpolineState
MiReloadBootLoadedDrivers