PfpRpControlRequestUpdate
INT64 __fastcall PfpRpControlRequestUpdate(INT64 a1, _DWORD *a2){
__int64 *v3;
unsigned int v5;
__int64 *v6;
__int64 *v7;
unsigned int v8;
__int64 v9;
void *v10;
__int64 v11;
_EPROCESS *v12;
INT64 result;
UINT64 v14;
UINT64 v15;
_EPROCESS *Process;
Process = 0i64;
v3 = (__int64 *)(a2 + 6);
v5 = 0;
v6 = v3;
v7 = v3;
v8 = a2[1];
v9 = v8 + a2[2];
if( (_DWORD)v9 )
{
do
{
v10 = (void *)*((unsigned int *)v7 + 1);
v11 = *(unsigned int *)v7;
*v6++ = v11;
if( (_DWORD)v10 && PsLookupProcessByProcessId(v10, (PEPROCESS *)&Process) >= 0 )
{
v12 = Process;
if( *((_DWORD *)Process + 381) == (_DWORD)v11 )
{
if( v5 < a2[1] )
_InterlockedOr((volatile signed __int32 *)Process + 281, 0x4000u);
else
_InterlockedAnd((volatile signed __int32 *)Process + 281, 0xFFFFBFFF);
v12 = Process;
}
ObfDereferenceObjectWithTag(v12, 0x746C6644ui64);
}
++v5;
++v7;
}
while( v5 < (unsigned int)v9 );
v8 = a2[1];
v3 = (__int64 *)(a2 + 6);
}
result = PfpRpCHashAddEntries(a1, (__m128i *)(a1 + 96), (volatile signed __int64 *)(a1 + 120), v3, v8);
if( (int)result >= 0 )
{
v14 = (unsigned int)a2[2];
if( !(_DWORD)v14
|| !*(_DWORD *)(a1 + 112)
|| (result = PfpRpCHashDeleteEntries(a1, a1 + 96, (INT64 *)(a1 + 120), v14, (INT64)&a2[2 * a2[1] + 6]),
(int)result >= 0) )
{
PfpRpCHashAddEntries(
a1,
(__m128i *)(a1 + 56),
(volatile signed __int64 *)(a1 + 88),
(__int64 *)((((unsigned __int64)&a2[2 * v9 + 7] + 3) & 0xFFFFFFFFFFFFFFF8ui64) + 8i64 * (unsigned int)a2[3]),
a2[4]);
v15 = (unsigned int)a2[3];
if( (_DWORD)v15 && *(_DWORD *)(a1 + 72) )
{
result = PfpRpCHashDeleteEntries(
a1,
a1 + 56,
(INT64 *)(a1 + 88),
v15,
((unsigned __int64)&a2[2 * v9 + 7] + 3) & 0xFFFFFFFFFFFFFFF8ui64);
if( (int)result < 0 )
return result;
*(_QWORD *)(a1 + 80) = 0i64;
}
return 0i64;
}
}
return result;
}Referenced by:
PfpRpControlRequestPerform