HalpTscSynchronizationWorker
INT8 __stdcall HalpTscSynchronizationWorker(PVOID Argument){
INT64 *v1;
INT8 result;
INT64 v3;
__int16 v4;
int v5;
_WORD v6[116];
v1 = (INT64 *)((unsigned __int64)v6 & 0xFFFFFFFFFFFFFFC0ui64);
*(_QWORD *)((unsigned __int64)v6 & 0xFFFFFFFFFFFFFFC0ui64) = Argument;
result = memset(((unsigned __int64)v6 & 0xFFFFFFFFFFFFFFC0ui64) + 64, 0i64);
v3 = *(_QWORD *)((unsigned __int64)v6 & 0xFFFFFFFFFFFFFFC0ui64);
if( *(_DWORD *)(v3 + 40) >= 2u )
{
if( *(_DWORD *)(HalpPerformanceCounter + 228) == 5 )
{
v4 = v6[112];
*(_QWORD *)(((unsigned __int64)*((unsigned int *)KeGetCurrentPrcb() + 9) << 7) + TscRequest + 16) = v1 + 8;
_disable();
v5 = v4 & 0x200;
if( _InterlockedExchangeAdd((volatile signed __int32 *)v3, 0xFFFFFFFF) != 1 )
{
do
_mm_pause();
while( *(_DWORD *)v3 );
}
if( *((_DWORD *)KeGetCurrentPrcb() + 9) == HalpTscRequestedLeadProcessor )
HalpTscAdvSynchLeader(v3);
else
result = HalpTscAdvSynchTarget();
if( v5 )
_enable();
}
else
{
return HalpTscCompatibilitySynchronization(*v1);
}
}
return result;
}Referenced by:
HalpPostSleepMP