PopFxConvertV1Components
VOID **__fastcall PopFxConvertV1Components(__int64 a1, unsigned int a2){
VOID **v2;
ULONGLONG v3;
unsigned int v5;
unsigned int v6;
int *v7;
int v8;
unsigned int v9;
UINT64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
VOID **PoolWithTag;
VOID **v14;
unsigned int v15;
char *v16;
__int64 v17;
char *v18;
__int128 v19;
__int64 v20;
__int64 v21;
__int64 v22;
UINT64 pullResult;
pullResult = 0i64;
v2 = 0i64;
v3 = a2;
if( a2 )
{
v5 = 0;
v6 = 0;
if( (_DWORD)v3 )
{
v7 = (int *)(a1 + 16);
while( 1 )
{
v8 = *v7;
if( !*v7 || v8 + v5 < v5 )
break;
++v6;
v7 += 8;
v5 += v8;
if( v6 >= (unsigned int)v3 )
goto LABEL_7;
}
}
else
{
LABEL_7:
if( RtlULongLongMult(v3, 0x38ui64, &pullResult) >= 0 )
{
v10 = (pullResult + 7) & 0xFFFFFFFFFFFFFFF8ui64;
v11 = 24i64 * v9;
if( v11 <= 0xFFFFFFFF )
{
v12 = v10 + (unsigned int)v11;
if( v12 >= (unsigned int)v11 )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v10 + (unsigned int)v11, 1297630800i64);
v14 = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, v12);
v15 = 0;
v16 = (char *)v14 + v10;
if( (_DWORD)v3 )
{
v17 = a1 + 16;
v18 = (char *)v14 + 28;
while( 1 )
{
v19 = *(_OWORD *)(v17 - 16);
*(_QWORD *)(v18 - 12) = 0i64;
v20 = 0i64;
*(_OWORD *)(v18 - 28) = v19;
*(_DWORD *)v18 = *(_DWORD *)v17;
*(_QWORD *)(v18 + 4) = v16;
*((_DWORD *)v18 - 1) = *(_DWORD *)(v17 + 4);
if( *(_DWORD *)v17 )
break;
LABEL_16:
++v15;
v17 += 32i64;
v18 += 56;
if( v15 >= (unsigned int)v3 )
goto LABEL_17;
}
while( v16 - (char *)v14 <= v12 - 24 )
{
v21 = *(_QWORD *)(v17 + 8);
v22 = 3 * v20;
v20 = (unsigned int)(v20 + 1);
*((_DWORD *)v16 + 4) = *(_DWORD *)(v21 + 8 * v22 + 16);
*(_QWORD *)v16 = *(_QWORD *)(v21 + 8 * v22);
*((_QWORD *)v16 + 1) = *(_QWORD *)(v21 + 8 * v22 + 8);
v16 += 24;
if( (unsigned int)v20 >= *(_DWORD *)v17 )
goto LABEL_16;
}
}
else
{
LABEL_17:
v2 = v14;
v14 = 0i64;
}
if( v14 )
ExFreePoolWithTag(v14, 0x4D584650u);
}
}
}
}
}
}
return v2;
}Referenced by:
PoFxRegisterCoreDevice
PoFxRegisterDevice
PoFxRegisterPrimaryDevice