MiGetPageForWriteCluster
VOID __fastcall MiGetPageForWriteCluster(
_RTL_BITMAP *AllocationBitmap,
_MMPTE *PointerPte,
_MMPTE ComparePte,
_MMPTE *OwningPte,
UINT64 ContainingFrame,
UINT64 *DummyGapLength,
_MI_RESAVAIL_CHARGE *ChargeState){
_MI_RESAVAIL_CHARGE *v7;
UINT64 *v8;
int v9;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v10;
_MMPFN *v12;
_MMPFN *v13;
UINT64 v14;
_MMPTE *PageIrql;
PageIrql = OwningPte;
v7 = ChargeState;
v8 = DummyGapLength;
v9 = 0;
LOBYTE(PageIrql) = 0;
v10.Long = ComparePte.u.Long;
*ChargeState = MiChargedLocal;
v12 = MiCheckPteForWriteCluster(AllocationBitmap, (ULONG_PTR)PointerPte, ComparePte, OwningPte, v14, &PageIrql);
v13 = v12;
if( v12 )
{
*v7 = MiReferencePageForModifiedWrite(v12, 0i64);
_InterlockedAnd64(&v13->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8((unsigned __int8)PageIrql);
if( *v7 )
goto LABEL_8;
}
else if( *(_DWORD *)v8 <= 0x1Fu )
{
if( *(&stru_140C4DB30 + 42) )
{
if( (v10.Long & 0x10) == 0 )
v10.Long &= ~*(&stru_140C4DB30 + 42);
}
if( !_bittest64((const signed __int64 *)AllocationBitmap->Buffer, HIDWORD(v10.Long)) )
{
v9 = *(_DWORD *)v8 + 1;
LABEL_8:
*(_DWORD *)v8 = v9;
}
}
}Referenced by:
MiBuildReservationCluster