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