MiUnmapRetpolineStubs
INT64 __fastcall MiUnmapRetpolineStubs(INT64 a1, INT64 a2){
int v2;
char *v3;
INT64 AnyMultiplexedVm;
__int64 v5;
int v6;
INT64 v7;
unsigned __int64 v8;
__int64 v9;
char *v10;
__int64 v11;
UINT8 v12;
unsigned __int64 v13;
INT64 v14;
char WsleContents;
INT64 v16;
_MMPFN *PfnDb;
UINT64 ContainingPageTable;
UINT8 v20;
__int64 v21;
unsigned __int64 v22;
__int64 v23;
int result;
__int16 result_4;
int v26;
__int64 v27;
__int64 v28;
v2 = a2;
memset((INT64)&result, 0i64);
v3 = 0i64;
if( v2 )
AnyMultiplexedVm = (INT64)MiGetAnyMultiplexedVm(1i64);
else
AnyMultiplexedVm = MiGetSessionVm();
v7 = AnyMultiplexedVm;
v8 = v5 + ((((unsigned int)dword_140C4C9F0 >> 12) + v6 + ((dword_140C4C9F0 & 0xFFF) != 0)) << 12);
v22 = v8;
v9 = qword_140C4C990;
v10 = (char *)MmGetPteBase() + ((v8 >> 9) & 0x7FFFFFFFF8i64);
v23 = qword_140C4C990;
result_4 = 0;
v26 = 20;
v27 = 0i64;
v28 = 0i64;
result = v2 == 0 ? 2 : 0;
v11 = 0i64;
v20 = MiLockWorkingSetShared(AnyMultiplexedVm);
v12 = v20;
if( dword_140C4C9C8 )
{
while( 1 )
{
v21 = *(_QWORD *)(v9 + 8 * v11 + 48);
v13 = (unsigned __int64)&v10[8 * v11];
if( !v3 )
goto LABEL_8;
if( (v13 & 0xFFF) == 0 )
break;
LABEL_9:
if( MI_READ_PTE_LOCK_FREE((INT64)&v10[8 * v11]) )
{
WsleContents = MiGetWsleContents(v14, v8 + (unsigned int)((_DWORD)v11 << 12));
MiWriteWsle(v16, v8 + (unsigned int)((_DWORD)v11 << 12), WsleContents & 0xF0 | 0xA);
*(_QWORD *)v13 = ZeroPte;
MiInsertTbFlushEntry((INT64)&result, v8 + (unsigned int)((_DWORD)v11 << 12), 1i64, 0i64);
PfnDb = MmGetPfnDb();
MiLockAndDecrementShareCount((UINT64)PfnDb + 48 * v21, 0);
ContainingPageTable = MiGetContainingPageTable((UINT64)&v10[8 * v11]);
MiLockAndDecrementShareCount((UINT64)PfnDb + 48 * ContainingPageTable, 0);
v8 = v22;
v9 = v23;
}
v11 = (unsigned int)(v11 + 1);
if( (unsigned int)v11 >= dword_140C4C9C8 )
{
v12 = v20;
goto LABEL_13;
}
}
MiFlushTbList((__int64)&result);
MiUnlockPageTableInternal(v7, (UINT64)v3);
LABEL_8:
v3 = (char *)MmGetPteBase() + ((v13 >> 9) & 0x7FFFFFFFF8i64);
MiLockPageTableInternal(v7, (UINT64)v3, 0i64);
goto LABEL_9;
}
LABEL_13:
MiFlushTbList((__int64)&result);
if( v3 )
MiUnlockPageTableInternal(v7, (UINT64)v3);
return MiUnlockWorkingSetShared(v7, v12);
}Referenced by:
MiUnloadSystemImage