KiWaitSatisfyAny

void __fastcall KiWaitSatisfyAny(__int64 a1, __int64 a2, __int64 a3){
  __int64 v6; 
  char v7; 
  __int64 v9; 
  UINT64 SpinCount; 
  if( !KiWaitSatisfyOther((KMUTANT *)a1) )
  {
    v7 = *(_BYTE *)v6 & 0x7F;
    if( v7 == 2 && (*(_DWORD *)(v6 + 4))-- == 1 )
    {
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)(a2 + 64), 0i64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *(_QWORD *)(a2 + 64) );
      }
      KiWaitSatisfyMutant((_KMUTANT *)a1, (_KTHREAD *)a2, (_KPRCB *)a3);
      KiReleaseThreadLockSafe(a2);
      if( (*(_BYTE *)(a1 + 48) & 2) != 0 )
      {
        LODWORD(v9) = KeAbPreAcquire((PVOID)a1, 0i64, 1ui64);
        if( v9 )
          *(_BYTE *)(v9 + 26) |= 1u;
      }
    }
  }
}

Referenced by:

KiWaitForAllObjects