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