KiIsPrimaryPresent

CHAR __stdcall KiIsPrimaryPresent(INT64 a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  CHAR v3; 
  _QWORD *Object; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int8 CurrentIrql; 
  bool v11; 
  UINT64 SpinCount; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 0;
  v11 = 0;
  Object = CurrentThread->Tcb.WaitBlock[3].Object;
  v5 = Object[4];
  v6 = Object[5];
  if( v5 && v6 )
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)&CurrentThread->Tcb.ThreadLock, 0i64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( CurrentThread->Tcb.ThreadLock );
    }
    if( CurrentThread->Tcb.Queue == (_DISPATCHER_HEADER *volatile)v5 )
      v11 = !_interlockedbittestandset((volatile signed __int32 *)v5, 7u);
    KiReleaseThreadLockSafe((INT64)CurrentThread);
    if( !v11 )
      goto LABEL_17;
    if( *(_QWORD *)(v5 + 24) == v6 && *(_DWORD *)(v6 - 72) == *((_DWORD *)Object + 6) )
    {
      if( !a1 )
      {
LABEL_15:
        v3 = 1;
        goto LABEL_16;
      }
      if( !*(_QWORD *)(v6 + 16) )
      {
        *(_QWORD *)(v6 + 16) = a1;
        *(_QWORD *)(v6 + 24) = a2;
        goto LABEL_15;
      }
    }
LABEL_16:
    _InterlockedAnd((volatile signed __int32 *)v5, 0xFFFFFF7F);
LABEL_17:
    __writecr8(CurrentIrql);
  }
  return v3;
}

Referenced by:

KiParkUmsThread
NtUmsThreadYield