MiIterateOverPartitions
VOID __stdcall MiIterateOverPartitions(){
__int64 v0;
void(__fastcall *v1)(__int64, __int64);
unsigned int v2;
__int64 v3;
void(__fastcall *v4)(__int64, __int64);
unsigned int v5;
int v6;
int v7;
__int64 v8;
unsigned int v9;
unsigned int v10;
_QWORD *v11;
__int64 i;
unsigned __int64 v13;
unsigned int v14;
unsigned int v15;
__int64 v16;
unsigned int v17;
v2 = 0;
v3 = v0;
v4 = v1;
while( 1 )
{
v5 = v2 < **(&stru_140C4DB30 + 263) ? v2 : 0;
v6 = **(&stru_140C4DB30 + 263) - 1;
v7 = (*(_DWORD *)(*(&stru_140C4DB30 + 263) + 8i64) & 4) != 0i64 ? 0x20 : 0;
v8 = *(_QWORD *)(*(&stru_140C4DB30 + 263) + 8i64)
- ((*(_QWORD *)(*(&stru_140C4DB30 + 263) + 8i64) & 4i64) != 0 ? 4 : 0);
while( 1 )
{
v9 = v7 + v6;
v10 = v7 + v5;
if( v6 - v5 == -1 )
goto LABEL_17;
v11 = (_QWORD *)(v8 + 8 * ((unsigned __int64)v10 >> 6));
for( i = ~*v11 | ((1i64 << (v10 & 0x3F)) - 1); i == -1; i = ~*v11 )
{
if( (unsigned __int64)++v11 > v8 + 8 * ((unsigned __int64)v9 >> 6) )
goto LABEL_17;
}
_BitScanForward64(&v13, ~i);
v14 = v13 + ((unsigned int)(((__int64)v11 - v8) >> 3) << 6);
if( v14 > v9 )
{
LABEL_17:
v14 = -1;
}
else if( v14 != -1 )
{
break;
}
if( !v5 )
break;
v17 = v2 + 1;
if( v2 + 1 > **(&stru_140C4DB30 + 263) )
v17 = **(&stru_140C4DB30 + 263);
v6 = v17 - 1;
v5 = 0;
}
v15 = v14 - v7;
if( v14 == -1 )
v15 = -1;
if( v15 < v2 || v15 == -1 )
break;
v2 = v15 + 1;
v16 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * v15);
if( (*(_DWORD *)(v16 + 4) & 2) != 0 )
v4(v16, v3);
}
}Referenced by:
MiLockAllMemoryLists
MiMirrorBlackPhase
MiResumeFromHibernate
MiUnlockAllMemoryLists