KiFastReadyThread
VOID __stdcall KiFastReadyThread(_ETHREAD *Thread){
UINT8 CurrentIrql;
_KPRCB *CurrentPrcb;
INT64 v4;
UINT64 SpinCount;
_SINGLE_LIST_ENTRY ReadyList;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
CurrentPrcb = KeGetCurrentPrcb();
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( Thread->Tcb.ThreadLock );
}
KiEnterDeferredReadyState((INT64)Thread);
KiReleaseThreadLockSafe(v4);
*(_QWORD *)Thread->Tcb.gapD8 = 0i64;
ReadyList.Next = (_SINGLE_LIST_ENTRY *)Thread->Tcb.gapD8;
KiReadyDeferredReadyList(CurrentPrcb, &ReadyList);
KiCheckForThreadDispatch(CurrentPrcb, CurrentIrql);
}Referenced by:
KeReadyThread
KiInSwapKernelStacks