KiWaitSatisfyAny

VOID __stdcall KiWaitSatisfyAny(VOID *Object, _ETHREAD *Thread, _KPRCB *Prcb){
  __int64 v6; 
  char v7; 
  _BYTE *v9; 
  UINT64 SpinCount; 

  if( !KiWaitSatisfyOther((_KMUTANT *)Object) )
  {
    v7 = *(_BYTE *)v6 & 0x7F;
    if( v7 == 2 && (*(_DWORD *)(v6 + 4))-- == 1 )
    {
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( Thread->Tcb.ThreadLock );
      }
      KiWaitSatisfyMutant((_KMUTANT *)Object, &Thread->Tcb, Prcb);
      KiReleaseThreadLockSafe((INT64)Thread);
      if( (*((_BYTE *)Object + 48) & 2) != 0 )
      {
        v9 = KeAbPreAcquire(Object, 0i64, 1ui64);
        if( v9 )
          v9[26] |= 1u;
      }
    }
  }
}

Referenced by:

KiWaitForAllObjects