MiDoneWithThisPageGetAnother
__int64 __fastcall MiDoneWithThisPageGetAnother(__int64 *a1, __int64 a2, __int64 a3, unsigned __int8 a4){
INT64 v4;
__int64 v5;
signed __int32 v9;
unsigned int v10;
_MI_PARTITION *v11;
UINT64 v12;
INT64 *SharedVm;
unsigned __int8 v14;
__int64 Page;
__int64 result;
_MMPFN *PfnDb;
__int128 v18;
v4 = a2 + 1664;
v5 = *a1;
v18 = 0i64;
if( v5 != -1 )
MiFinishLastForkPageTable((UINT64)a1, v5);
MiInitializePageColorBase(v4, 0i64, (INT64)&v18);
v9 = _InterlockedExchangeAdd((volatile signed __int32 *)v18, 1u);
v10 = HIDWORD(v18) | v9 & DWORD2(v18);
v11 = *(_MI_PARTITION **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a3 + 1838));
while( 1 )
{
Page = MiGetPage(v11, v10, 0x302ui64);
*a1 = Page;
if( Page != -1 )
break;
MiUnlockWorkingSetExclusive(v4, a4);
MiWaitForFreePage(v11, v12);
SharedVm = MiGetSharedVm(v4);
v14 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
*((_DWORD *)SharedVm + 1) = 0;
a4 = v14;
}
result = 6 * Page;
PfnDb = MmGetPfnDb();
*((_QWORD *)PfnDb + result + 2) &= 0xFFFFFFFFFC00FFFFui64;
return result;
}Referenced by:
MiUpdateForkMaps