HalpDpReplaceControl
INT64 __fastcall HalpDpReplaceControl(INT64 a1, INT64 a2, INT64 a3){
int v3;
unsigned int v4;
int v6;
int v7;
unsigned int v8;
int v9;
int v10;
unsigned int v11;
__int64 v12;
__int64 v13;
unsigned int v14;
int v15;
__int64 v16;
__int64 v17;
__int64 v18;
unsigned int v19;
v3 = *(_DWORD *)a2;
v4 = 0;
if( (_DWORD)a1 )
{
v6 = a1 - 1;
if( v6 )
{
v7 = v6 - 1;
if( v7 )
{
if( v7 == 1 )
{
*(_BYTE *)(a2 + 68) = 1;
if( v3 )
{
v8 = 0;
_InterlockedIncrement((volatile signed __int32 *)(a2 + 48));
v9 = *(_DWORD *)(a2 + 48);
v10 = v3 + 1;
while( v9 < v10 )
{
if( (++v8 & dword_140C4A13C) != 0 || !qword_140C4A140 )
_mm_pause();
else
qword_140C4A140(v8, a2, a3);
v9 = *(_DWORD *)(a2 + 48);
}
v11 = 0;
_InterlockedIncrement((volatile signed __int32 *)(a2 + 52));
while( *(_DWORD *)(a2 + 52) < v10 )
{
if( (++v11 & dword_140C4A13C) != 0 || !qword_140C4A140 )
_mm_pause();
else
qword_140C4A140(v11, a2, a3);
}
}
}
}
else
{
HalpDpPostReplace(a2, a2, a3);
}
}
else if( v3 )
{
*(LARGE_INTEGER *)(a2 + 80) = KeQueryPerformanceCounter((PLARGE_INTEGER)(a2 + 72));
v14 = 0;
_InterlockedIncrement((volatile signed __int32 *)(a2 + 48));
v15 = v3 + 1;
while( *(_DWORD *)(a2 + 48) < v15 )
{
if( (++v14 & dword_140C4A13C) != 0 || !qword_140C4A140 )
_mm_pause();
else
qword_140C4A140(v14, v12, v13);
}
while( *(_DWORD *)(a2 + 56) < v3 )
_mm_pause();
v16 = 0i64;
for( *(LARGE_INTEGER *)(a2 + 96) = KeQueryPerformanceCounter(0i64);
(unsigned int)v16 < *(_DWORD *)a2;
v16 = (unsigned int)(v16 + 1) )
{
HalpDpStartProcessor((PVOID)*(unsigned int *)(*(_QWORD *)(a2 + 24) + 4 * v16));
}
*(LARGE_INTEGER *)(a2 + 112) = KeQueryPerformanceCounter(0i64);
if( !*(_BYTE *)(a2 + 44) )
v4 = HalpInterruptSwapProcessorIdentifiers(*(PVOID *)(a2 + 8));
v19 = 0;
_InterlockedIncrement((volatile signed __int32 *)(a2 + 52));
while( *(_DWORD *)(a2 + 52) < v15 )
{
if( (++v19 & dword_140C4A13C) != 0 || !qword_140C4A140 )
_mm_pause();
else
qword_140C4A140(v19, v17, v18);
}
}
}
else
{
HalpDpPreReplace(a2);
}
return v4;
}Referenced by:
No references.