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