KeTryToInsertQueueApc

UINT8 __stdcall KeTryToInsertQueueApc(_KAPC *Apc, PVOID SystemArgument1, PVOID SystemArgument2){
  _ETHREAD *Thread; 
  UINT8 v7; 
  UINT8 CurrentIrql; 
  _KPRCB *CurrentPrcb; 
  UINT8 v10; 
  char v12; 
  Thread = Apc->Thread;
  v7 = 0;
  if( !KeIsThreadRunning((__int64)Thread) )
    return 0;
  CurrentIrql = ObGetCurrentIrql();
  CurrentPrcb = KeGetCurrentPrcb();
  v10 = CurrentIrql;
  if( !KiTryToAcquireThreadLock((__int64)Thread, &v12) )
    return 0;
  if( (*((_DWORD *)Thread + 29) & 0x4000) != 0 && !Apc->Inserted )
  {
    v7 = 1;
    Apc->SystemArgument1 = SystemArgument1;
    Apc->Inserted = 1;
    Apc->SystemArgument2 = SystemArgument2;
    KiInsertQueueApc(Apc);
    KiSignalThreadForApc(CurrentPrcb, Apc, v10);
  }
  KiReleaseThreadLockSafe((INT64)Thread);
  return v7;
}

Referenced by:

EtwpCovSampCaptureQueueApc
EtwpQueueStackWalkApc