KiInsertDeferredPreemptionApc

VOID __stdcall KiInsertDeferredPreemptionApc(_KPRCB *Prcb, _ETHREAD *Thread, UINT8 CalledFromContextSwap){
  _KAPC *v5; 
  UINT64 SpinCount; 
  if( CalledFromContextSwap )
  {
    _interlockedbittestandreset((volatile signed __int32 *)Thread + 30, 0xBu);
  }
  else if( (*((_DWORD *)Thread + 30) & 0x400) != 0 )
  {
    return;
  }
  _interlockedbittestandset((volatile signed __int32 *)Thread + 30, 0xAu);
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)Thread + 16, 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *((_QWORD *)Thread + 8) );
  }
  if( !*((_BYTE *)Thread + 730) && (*((_DWORD *)Thread + 29) & 0x4000) != 0 )
  {
    *((_BYTE *)Thread + 730) = 1;
    KiInsertQueueApc((_KAPC *)((char *)Thread + 648));
    KiSignalThreadForApc(Prcb, v5, 2u);
  }
  KiReleaseThreadLockSafe((INT64)Thread);
}

Referenced by:

KiBeginThreadAccountingPeriod
KiDeferGroupSchedulingPreemption
KiGroupSchedulingQuantumEnd
KiSwapThread