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