KiCompleteDirectSwitchThread
char __fastcall KiCompleteDirectSwitchThread(__int64 a1, __int64 a2){
int v2;
UINT64 updated;
__int64 v6;
unsigned __int64 v7;
v2 = *(_DWORD *)(a2 + 120);
if( (v2 & 0x20) != 0 )
{
_interlockedbittestandreset((volatile signed __int32 *)(a2 + 120), 5u);
_disable();
updated = KiUpdateTotalCyclesCurrentThread(a1, a2, 0i64);
_enable();
v6 = *(_QWORD *)(a1 + 11528);
if( v6 )
{
v7 = *(_QWORD *)(a2 + 32);
if( v7 > updated )
*(_QWORD *)(v6 - 184) += v7 - updated;
}
LOBYTE(v2) = KiRemoveBoostThread((_KPRCB *)a1, (_KTHREAD *)a2);
*(_QWORD *)(a2 + 32) = updated;
}
return v2;
}Referenced by:
KeReleaseSemaphoreEx