MiReturnSystemPtes
VOID __stdcall MiReturnSystemPtes(
_MI_SYSTEM_PTE_TYPE *SystemPteInfo,
UINT64 StartBit,
UINT64 NumberOfBits,
UINT64 Large){
_MMPTE *BasePte;
UINT64 v7;
unsigned int v8;
__int64 v9;
UINT64 v10;
__int64 v11;
__int64 v12;
_MI_SYSTEM_VA_TYPE VaType;
__int64 v14;
BasePte = SystemPteInfo->BasePte;
v7 = 16 * StartBit;
v8 = SystemPteInfo->Flags & 4;
if( !v8 )
v7 = StartBit;
_InterlockedExchangeAdd64((volatile signed __int64 *)&SystemPteInfo->TotalFreeSystemPtes, -(__int64)NumberOfBits);
_InterlockedExchangeAdd64((volatile signed __int64 *)&SystemPteInfo->TotalSystemPtes, -(__int64)NumberOfBits);
v9 = ((_QWORD)&BasePte[v7] << 25) - ((_QWORD)MmGetPteBase() << 25);
v10 = 16 * NumberOfBits;
v11 = v9 >> 16;
if( !v8 )
v10 = NumberOfBits;
v12 = v9 + (v10 << 28);
VaType = SystemPteInfo->VaType;
v14 = v12 >> 16;
if( (_DWORD)Large == 1 )
VaType = MiVaSystemPtesLarge;
MiReturnSystemVa((VOID *)v11, (VOID *)v14, VaType, 0i64);
}Referenced by:
MiAttemptCoalesce
MiReleasePtes