NtUmsThreadYield

NTSTATUS __stdcall NtUmsThreadYield(VOID *SchedulerParam){
  _ETHREAD *CurrentThread; 
  _ETHREAD *v2; 
  NTSTATUS result; 
  _DWORD *Object; 
  INT64 v5; 
  __int64 v6; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v2 = CurrentThread;
  if( !CurrentThread )
    v2 = (_ETHREAD *)KeGetCurrentThread();
  if( (v2->Tcb.gap0[3] & 0x40) == 0 )
    return -1073741637;
  Object = CurrentThread->Tcb.WaitBlock[3].Object;
  v5 = *(_QWORD *)Object;
  v6 = *(_QWORD *)(*(_QWORD *)Object + 1272i64);
  *(_QWORD *)(*(_QWORD *)Object + 1272i64) = 1i64;
  if( KiIsPrimaryPresent(v5, (INT64)SchedulerParam) )
  {
    Object[20] |= 1u;
    return 0;
  }
  else
  {
    result = -1073740004;
    *(_QWORD *)(v5 + 1272) = v6;
  }
  return result;
}

Referenced by:

No references.