KiResetScb

VOID __stdcall KiResetScb(_KSCB *Scb){
  _KPRCB *v1; 
  bool v2; 
  _KPRCB *v3; 
  _KSCB *v4; 
  volatile unsigned int *ShareRank; 
  _KSCB *Parent; 
  unsigned int Rank; 
  _KPRCB *v8; 
  unsigned __int64 Root; 

  *((_BYTE *)Scb + 112) &= 0xF1u;
  v2 = (*((_BYTE *)Scb + 112) & 0x20) == 0;
  v3 = v1;
  v4 = Scb;
  Scb->GenerationCycles = 0i64;
  Scb->RankCycleTarget = 0i64;
  Scb->LastReportedCycles = 0i64;
  Scb->ReadyTime = 0i64;
  Scb->Rank = 0;
  if( v2 )
  {
    ShareRank = Scb->ShareRank;
    if( ShareRank )
      *ShareRank = 0;
  }
  else
  {
    Scb->OwnerShareRank = 0;
  }
  if( Scb->ReadySummary )
  {
    if( !Scb->Rank )
    {
      do
      {
        Parent = Scb->Parent;
        if( !Parent )
          break;
        Scb = Scb->Parent;
      }
      while( !Parent->Rank );
    }
    Rank = Scb->Rank;
    v8 = 0i64;
    if( !Rank )
      v8 = v1;
    KiMoveScbThreadsToNewReadylist(v4, (_KSCB *)((unsigned __int64)Scb & -(__int64)(Rank != 0)), v8, 0i64);
    if( (*((_BYTE *)v4 + 112) & 1) != 0 )
    {
      Root = (unsigned __int64)v4->ChildScbQueue.Root;
      if( (v4->ChildScbQueue._bf_0 & 1) != 0 )
      {
        if( !Root )
        {
LABEL_16:
          KiRemoveSchedulingGroupQueue(v3, v4, 0);
          return;
        }
        Root ^= (unsigned __int64)&v4->ChildScbQueue;
      }
      if( !Root )
        goto LABEL_16;
    }
  }
}

Referenced by:

KiUpdateCpuTargetByRate
KiUpdateCpuTargetByWeight