MiMakeDriverPageStayResident
CHAR __fastcall MiMakeDriverPageStayResident(INT64 a1, INT64 a2, UINT64 a3){
UINT64 v5;
signed __int32 *v6;
CHAR result;
char *v8;
UINT64 v9;
char *v10;
UINT64 SpinCount;
UINT64 v12;
v5 = (a3 - *(_QWORD *)(a1 + 48)) >> 12;
v6 = *(signed __int32 **)(*(_QWORD *)(a1 + 272) + 8i64);
result = v5;
if( !_bittest64((const signed __int64 *)v6, (unsigned int)v5) )
{
_bittestandset(v6, v5);
result = MiGetWsleContents((INT64)v6, a3) & 0xF;
if( result != 9 )
{
v8 = (char *)MmGetPteBase() + ((a3 >> 9) & 0x7FFFFFFFF8i64);
v12 = MI_READ_PTE_LOCK_FREE((INT64)v8);
v9 = v12;
MiPteInShadowRange((UINT64)&v12);
v10 = (char *)MmGetPfnDb() + 48 * ((v9 >> 12) & 0xFFFFFFFFFi64);
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)v10 + 6, 0x3Fui64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *((__int64 *)v10 + 3) < 0 );
}
MiRemoveSystemImagePage(a2, (INT64)v8, (INT64)v10);
result = -1;
_InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
}
}
return result;
}Referenced by:
MiMakeDriverPagesPrivate