KiCheckGroupSchedulingQuantumEnd

UINT8 __stdcall KiCheckGroupSchedulingQuantumEnd(_KPRCB *Prcb, _ETHREAD *Thread){
  _KSCHEDULING_GROUP *volatile SchedulingGroup; 
  char *v4; 
  char v5; 
  char *v6; 
  char v7; 
  unsigned __int64 v8; 

  if( KUSER_SHARED_DATA.TickCountQuad > Prcb->GenerationTarget )
    return 1;
  SchedulingGroup = Thread->Tcb.SchedulingGroup;
  if( !SchedulingGroup )
    return 0;
  v4 = (char *)SchedulingGroup + Prcb->ScbOffset;
  if( !v4 )
    return 0;
  while( 1 )
  {
    v5 = v4[112];
    v6 = &v4[-Prcb->ScbOffset];
    v7 = v5 & 0x10;
    if( (v5 & 4) == 0 )
      break;
    if( v7 )
    {
      v8 = *((_QWORD *)v4 + 3);
LABEL_9:
      if( *(_QWORD *)v4 >= v8 )
        return 1;
      goto LABEL_10;
    }
    if( (v5 & 2) == 0 && (*((__int64 *)v6 + 6) <= 0 || *(_QWORD *)v4 >= *((_QWORD *)v4 + 3)) )
      return 1;
LABEL_10:
    v4 = (char *)*((_QWORD *)v4 + 51);
    if( !v4 )
      return 0;
  }
  if( v7 )
  {
    v8 = *((_QWORD *)v4 + 1);
    goto LABEL_9;
  }
  if( (v5 & 2) != 0 || *((__int64 *)v6 + 6) > 0 )
    goto LABEL_10;
  return 1;
}

Referenced by:

KiUpdateRunTime