MiRemovePageAnyColor
NTSTATUS __stdcall MiRemovePageAnyColor(_MI_PARTITION *Partition, UINT64 a2, UINT64 a3){
_MI_PARTITION *v3;
__int16 v4;
__int64 v5;
_BOOL8 v6;
_MI_NODE_INFORMATION *v7;
volatile unsigned __int64 *v8;
unsigned int v9;
unsigned __int64 v10;
int v11;
_RTL_BITMAP *v12;
int v13;
unsigned int v14;
unsigned __int64 v15;
unsigned int *v16;
int v17;
unsigned int v18;
__int64 PerfectColorHeadPage;
unsigned int v20;
int v21;
unsigned int v22;
char v23;
UINT8 *v25;
_MMPFNLIST *v26;
int v28;
_MMLISTS PageType;
_BOOL4 v30;
v28 = a3;
v3 = Partition;
v4 = a3;
LODWORD(v5) = a2;
v6 = (a3 & 2) == 0;
v7 = &Partition->Core.NodeInformation[(unsigned __int64)(unsigned int)a2 >> *(&stru_140C4DB30 + 156)];
if( (unsigned int)MmNumberOfChannels > 1 )
v8 = &v7->ChannelFreeCount[(unsigned __int8)(MiChannelMaximumPowerOf2Mask & ((unsigned int)v5 >> *(&stru_140C4DB30 + 157)))][v6];
else
v8 = &v7->FreeCount[v6];
if( *v8 )
{
v9 = *(&stru_140C4DB30 + 66);
v10 = 0i64;
v11 = v5;
v12 = &v7->FreePageListHeadsBitmap[v6];
v26 = v3->PageLists.FreePagesByColor[v6];
v13 = 0;
v14 = *(&stru_140C4DB30 + 66) + 1;
while( 1 )
{
while( 1 )
{
v15 = (unsigned int)v5 & v9;
v16 = &v12->Buffer[v15 >> 5];
if( (unsigned int *)v10 != v16 )
{
v10 = (unsigned __int64)&v12->Buffer[(unsigned __int64)((unsigned int)v5 & v9) >> 5];
v13 = *v16 & (-1 << (v15 & 0x1F));
if( (v4 & 0x4000) != 0 )
{
v21 = 0;
v22 = (unsigned __int8)v11 & (unsigned __int8)v9 & 0xF;
do
{
v23 = v22 & 0x1F;
v22 += 16;
v21 |= 1 << v23;
}
while( v22 < 0x20 && v22 <= v9 );
v13 &= ~v21;
v3 = Partition;
}
else if( ((v15 ^ v14) & 0xFFFFFFFFFFFFFFE0ui64) == 0 )
{
v13 &= (1 << (v14 & 0x1F)) - 1;
}
}
v17 = v5 & v9 & 0xFFFFFFE0;
if( v13 )
break;
v20 = v17 + 32;
if( v20 >= v14 )
{
v10 = 0i64;
if( !v11 || v14 != v9 + 1 )
goto LABEL_14;
v14 = v11 & v9;
LODWORD(v5) = v11 & ~v9;
}
else
{
LODWORD(v5) = v20 + (~v9 & v5);
}
}
_BitScanForward(&v18, v13);
PageType = v6;
v30 = v6;
v5 = v18 + v17 + (~v9 & (unsigned int)v5);
v13 &= ~(1 << v18);
LODWORD(PerfectColorHeadPage) = MiSlistGetFreePage(v3, (_MMLISTS)&PageType, (unsigned int)v5);
if( PerfectColorHeadPage )
return PerfectColorHeadPage;
LODWORD(v25) = v28;
PerfectColorHeadPage = MiGetPerfectColorHeadPage(Partition, &v26[v5], v5, (_MMLISTS)v6, v25);
if( PerfectColorHeadPage == 1 )
break;
if( PerfectColorHeadPage )
return PerfectColorHeadPage;
v3 = Partition;
v4 = v28;
}
LODWORD(PerfectColorHeadPage) = 1;
}
else
{
LABEL_14:
LODWORD(PerfectColorHeadPage) = 0;
}
return PerfectColorHeadPage;
}Referenced by:
MiGetFreeOrZeroPageAnyColor