PopFxConvertV1Components
PO_FX_COMPONENT_V2 *__stdcall PopFxConvertV1Components(PO_FX_COMPONENT_V1 *ComponentsV1, UINT64 ComponentCount){
PO_FX_COMPONENT_V2 *v2;
UINT64 v3;
unsigned int v5;
unsigned int v6;
ULONG *p_IdleStateCount;
ULONG v8;
unsigned int v9;
ULONGLONG v10;
unsigned __int64 v11;
unsigned __int64 v12;
PO_FX_COMPONENT_V2 *PoolWithTag;
PO_FX_COMPONENT_V2 *v14;
unsigned int v15;
char *v16;
ULONG *v17;
ULONG *v18;
__int128 v19;
__int64 v20;
__int64 v21;
__int64 v22;
ULONGLONG pullResult;
pullResult = 0i64;
v2 = 0i64;
v3 = (unsigned int)ComponentCount;
if( (_DWORD)ComponentCount )
{
v5 = 0;
v6 = 0;
if( (_DWORD)v3 )
{
p_IdleStateCount = &ComponentsV1->IdleStateCount;
while( 1 )
{
v8 = *p_IdleStateCount;
if( !*p_IdleStateCount || v8 + v5 < v5 )
break;
++v6;
p_IdleStateCount += 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 = (PO_FX_COMPONENT_V2 *)ExAllocatePoolWithTag(
NonPagedPoolNx,
v10 + (unsigned int)v11,
0x4D584650ui64);
v14 = PoolWithTag;
if( PoolWithTag )
{
memset((INT64)PoolWithTag, 0i64);
v15 = 0;
v16 = (char *)v14 + v10;
if( (_DWORD)v3 )
{
v17 = &ComponentsV1->IdleStateCount;
v18 = &v14->IdleStateCount;
while( 1 )
{
v19 = *((_OWORD *)v17 - 1);
*(_QWORD *)(v18 - 3) = 0i64;
v20 = 0i64;
*(_OWORD *)(v18 - 7) = v19;
*v18 = *v17;
*(_QWORD *)(v18 + 1) = v16;
*(v18 - 1) = v17[1];
if( *v17 )
break;
LABEL_16:
++v15;
v17 += 8;
v18 += 14;
if( v15 >= (unsigned int)v3 )
goto LABEL_17;
}
while( v16 - (char *)v14 <= v12 - 24 )
{
v21 = *((_QWORD *)v17 + 1);
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 >= *v17 )
goto LABEL_16;
}
}
else
{
LABEL_17:
v2 = v14;
v14 = 0i64;
}
if( v14 )
ExFreePoolWithTag(v14, 0x4D584650u);
}
}
}
}
}
}
return v2;
}Referenced by:
PoFxRegisterCoreDevice
PoFxRegisterDevice
PoFxRegisterPrimaryDevice