HalpTscAdvSynchToTarget
NTSTATUS __stdcall HalpTscAdvSynchToTarget(UINT64 a1){
unsigned int v1;
INT64 v2;
__int64 v3;
unsigned int i;
__int64 v5;
INT64 v6;
__int64 v7;
unsigned int v8;
unsigned int v9;
NTSTATUS result;
v1 = a1;
HalpTscAdvSynchSkewCounter(0i64);
v2 = 0i64;
v3 = 0x7FFFFFFFFFFFFFFFi64;
for( i = 0; i < HalpTscSyncRecalculateSkews; ++i )
{
v5 = v3;
v6 = HalpTscAdvSynchCalculateRemoteDelta(v1, (unsigned int)HalpTscRequestedIterations, 0i64);
v7 = 100i64;
do
{
HalpTscAdvSynchSkewCounter(0i64);
--v7;
}
while( v7 );
v2 = HalpTscAdvSynchCalculateRemoteDelta(v1, (unsigned int)HalpTscRequestedIterations, 0i64);
v3 = (v2 - v6) / 100;
if( v3 >= v5 )
v3 = v5;
}
v8 = 0;
v9 = 0;
*(_DWORD *)(qword_140C4A3E0 + 4i64 * KeGetCurrentPrcb()->Number) = v3;
do
{
if( !v8 )
HalpTscAdvSynchSkewCounter(v3 + v2);
v2 = HalpTscAdvSynchCalculateRemoteDelta(v1, (unsigned int)HalpTscRequestedIterations, 0i64);
if( !v8 )
HalpTscTraceProcessorSynchronization(v1, KeGetCurrentPrcb()->Number, v2);
++v8;
if( (unsigned __int64)(v2 + 24) > 0x30 )
v8 = 0;
++v9;
}
while( v9 < 0x32 && v8 < 2 );
result = qword_140C4A3D8;
*(_DWORD *)(qword_140C4A3D8 + 4i64 * KeGetCurrentPrcb()->Number) = v9;
return result;
}Referenced by:
HalpTscAdvSynchLeader