MiUnlockCodePage
VOID __stdcall MiUnlockCodePage(MMPTE *PointerPte, MMPTE *LastPte){
int v2;
int v3;
unsigned __int64 v5;
char *v6;
INT64 v7;
char *v8;
UINT64 v9;
char *v10;
unsigned __int64 v11;
UINT64 v12;
v3 = v2;
v5 = (unsigned __int64)PointerPte;
v6 = (char *)MmGetPteBase() + (((unsigned __int64)PointerPte >> 9) & 0x7FFFFFFFF8i64);
if( PointerPte <= LastPte )
{
MiPteInShadowRange((UINT64)&v12);
do
{
v7 = (INT64)v6;
v8 = v6;
if( !v3 )
v7 = v5;
v12 = MI_READ_PTE_LOCK_FREE(v7);
v9 = (v12 >> 12) & 0xFFFFFFFFFi64;
if( v3 )
v9 += (v5 >> 3) & 0x1FF;
v10 = (char *)MmGetPfnDb() + 48 * v9;
v11 = (unsigned __int8)MiLockPageInline((INT64)v10);
MiRemoveLockedPageChargeAndDecRef((_MMPFN *)v10);
_InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v11);
v5 += 8i64;
v6 = v8 + 8;
if( (v5 & 0xFFF) != 0 )
v6 = v8;
}
while( v5 <= (unsigned __int64)LastPte );
}
}Referenced by:
MiHandleDriverNonPagedSections
MiLockCode
MiUnlockDriverCode
MiUnlockDriverPages
MmUnlockPreChargedPagedPool