SmpFpWaitForResource
INT64 __fastcall SmpFpWaitForResource(INT64 SpinLock, UINT64 a2, _ETHREAD *a3){
_ETHREAD *CurrentThread;
unsigned int v4;
_ETHREAD *i;
INT64 result;
CurrentThread = a3;
v4 = a2;
if( !a3 )
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
for( i = *(_ETHREAD **)(SpinLock + 104);
CurrentThread != i
&& (*(_QWORD *)(SpinLock + 104)
|| _InterlockedCompareExchange64((volatile signed __int64 *)(SpinLock + 104), (signed __int64)CurrentThread, 0i64));
i = *(_ETHREAD **)(SpinLock + 104) )
{
KeWaitForSingleObject((PVOID)(SpinLock + 8), Executive, 0, 0, 0i64);
}
LODWORD(result) = SmpFpAllocateResource(SpinLock, v4);
if( !a3 )
_InterlockedExchange64((volatile __int64 *)(SpinLock + 104), result);
return result;
}Referenced by:
SmFpAllocate