HalpTscAdvSynchCalculateRemoteDelta
INT64 __fastcall HalpTscAdvSynchCalculateRemoteDelta(UINT64 a1, INT64 a2, _DWORD *a3){
__int64 v4;
unsigned __int64 v5;
__int64 v6;
__int64 v7;
INT64 v8;
INT64 v9;
__int64 v10;
__int64 v12;
int v13[10];
v4 = (unsigned int)a1;
if( HalpTscSyncPolicy )
{
if( HalpTscSyncPolicy == 1 )
{
v12 = TscRequest;
v5 = v4 << 7;
*(_DWORD *)((v4 << 7) + TscRequest + 4) = 0;
_InterlockedExchange((volatile __int32 *)((v4 << 7) + v12), 4);
if( *(_DWORD *)((v4 << 7) + TscRequest) == 4 )
{
do
_mm_pause();
while( *(_DWORD *)(v5 + TscRequest) == 4 );
}
v8 = HalpTscAdvSynchComputeMinimumDelta((unsigned int)v4, a2);
goto LABEL_5;
}
if( HalpTscSyncPolicy != 2 )
return -1i64;
}
v5 = (unsigned __int64)(unsigned int)a1 << 7;
v6 = *((unsigned int *)KeGetCurrentPrcb() + 9);
v7 = TscRequest;
*(_DWORD *)((v4 << 7) + TscRequest + 4) = v6;
**(_QWORD **)((v4 << 7) + v7 + 16) = 0i64;
**(_QWORD **)((v6 << 7) + TscRequest + 16) = -1i64;
_InterlockedExchange((volatile __int32 *)((v4 << 7) + TscRequest), 5);
if( *(_DWORD *)((v4 << 7) + TscRequest) == 5 )
{
do
_mm_pause();
while( *(_DWORD *)(v5 + TscRequest) == 5 );
}
v8 = HalpTscAdvSynchComputeMinimumDeltaAlternate((unsigned int)v4, a2);
LABEL_5:
v9 = v8;
while( *(_DWORD *)(v5 + TscRequest) )
_mm_pause();
_InterlockedOr(v13, 0);
v10 = *(_QWORD *)(v5 + TscRequest + 8);
if( a3 )
*a3 = v9 + v10;
return(v10 - v9) / 2;
}Referenced by:
HalpTscAdjustToLeader
HalpTscAdjustToTarget
HalpTscAdvSynchCalculateRemoteDeltas
HalpTscAdvSynchToLeader
HalpTscAdvSynchToTarget