MiGetGangAssignment

__int64 __fastcall MiGetGangAssignment(__int64 a1, _QWORD *a2){
  unsigned __int64 v2; 
  _QWORD *v3; 
  bool v4; 

  v2 = _InterlockedIncrement((volatile signed __int32 *)(a1 + 176)) - 1i64;
  if( v2 >= *(unsigned int *)(a1 + 188) )
    return 0i64;
  if( (*(_DWORD *)(a1 + 184) & 1) != 0 )
  {
    v3 = (_QWORD *)(*(_QWORD *)(a1 + 16) + 16 * v2);
    v4 = v3[1] == 0i64;
  }
  else
  {
    v3 = (_QWORD *)(*(_QWORD *)(a1 + 8) + 8 * v2);
    v4 = *v3 == 0i64;
  }
  if( v4 )
    return 0i64;
  *a2 = v3;
  return 1i64;
}

Referenced by:

MiDpcGangTarget
MiStartDpcGang