KiTryLocalThreadSchedule
NTSTATUS __stdcall KiTryLocalThreadSchedule(INT64 a1, INT64 a2, INT64 a3, INT64 a4, CHAR a5, CHAR a6){
__int64 v8;
unsigned __int64 *v9;
unsigned __int64 v10;
UINT64 v11;
INT64 v12;
int v13;
int v14;
unsigned __int64 v15;
UINT64 IdleCandidateSet[5];
if( (*(_BYTE *)(a1 + 12588) & 1) == 0
|| *(_BYTE *)(a3 + 643) != 15 && *(_DWORD *)(a3 + 84) >= (unsigned int)KiShortExecutionCycles )
{
goto LABEL_2;
}
v9 = *(unsigned __int64 **)(a1 + 192);
v10 = *v9;
v11 = a4 & *v9;
v12 = v11;
IdleCandidateSet[0] = v11;
if( a6 )
{
if( v11 )
goto LABEL_7;
v10 = v9[3] & v9[11];
v11 = a4 & v10;
IdleCandidateSet[0] = a4 & v10;
v12 = a4 & v10;
}
if( !v12 )
goto LABEL_2;
LABEL_7:
if( (v12 & *(_QWORD *)(a1 + 33896)) != 0 )
{
v11 = v12 & *(_QWORD *)(a1 + 33896);
IdleCandidateSet[0] = v11;
}
if( (*((_BYTE *)v9 + 181) & 0x20) == 0 )
goto LABEL_13;
if( !a5 || !KiFindRankBiasedIdleSmtSet(a1, IdleCandidateSet) )
{
v11 = IdleCandidateSet[0] & v9[1];
if( v11 )
{
if( !a5
|| (unsigned int)((0x101010101010101i64
* ((((v10 - ((v10 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v10 - ((v10 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
+ ((((v10 - ((v10 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v10 - ((v10 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24 >= KiPerfIsoEnabled )
{
LABEL_13:
if( (v11 & ~*(_QWORD *)(a1 + 33880)) != 0 )
v11 &= ~*(_QWORD *)(a1 + 33880);
goto LABEL_15;
}
LABEL_2:
LODWORD(v8) = 0;
return v8;
}
if( a5 )
goto LABEL_2;
if( !KiReduceByEffectiveIdleSmtSet((_KPRCB *)a1, IdleCandidateSet) )
{
v11 = IdleCandidateSet[0];
goto LABEL_13;
}
}
v11 = IdleCandidateSet[0];
LABEL_15:
v13 = *(unsigned __int8 *)(a1 + 208);
v14 = *(_DWORD *)(a1 + 33876);
if( *(_BYTE *)(a2 + 208) == (_BYTE)v13 && (*(_QWORD *)(a1 + 33888) & *(_QWORD *)(a2 + 200)) != 0i64 )
LOBYTE(v14) = *(_BYTE *)(a2 + 209);
_BitScanForward64(&v15, __ROR8__(v11, v14));
return(int)*(&KiProcessorBlock
+ (unsigned int)KiProcessorNumberToIndexMappingTable[64 * v13 + (((_BYTE)v15 + (_BYTE)v14) & 0x3F)]);
}Referenced by:
KiChooseTargetProcessor