RtlpFcCalculateRequiredSizeForNewFeatureTable
VOID __stdcall RtlpFcCalculateRequiredSizeForNewFeatureTable(){
_HBASE_BLOCK *v0;
_DWORD *v1;
unsigned __int64 v2;
ULONGLONG *v3;
ULONGLONG v4;
ULONGLONG v5;
unsigned __int64 v6;
ULONGLONG *v7;
unsigned __int64 v8;
_HBASE_BLOCK *v9;
_DWORD *v10;
ULONGLONG v11;
_HBASE_BLOCK *v12;
int v13;
INT64 v14;
int v15;
UINT8 IsUpdateModifyingOrAddingFeature;
ULONGLONG v17;
ULONGLONG v18;
_HBASE_BLOCK *v19;
unsigned __int64 v20;
UINT8 v21;
__int64 v22;
ULONGLONG v23;
ULONGLONG v24;
__int64 v25;
INT64 v26;
int v27;
v4 = 0i64;
v5 = 0i64;
v6 = 0i64;
v7 = v3;
v8 = v2;
v9 = v0;
if( v1 )
{
v4 = (unsigned int)*v1;
v10 = v1 + 1;
v11 = v4;
if( *v1 )
{
v12 = v0;
do
{
if( v6 >= v8 )
goto LABEL_22;
v13 = RtlpFcCompareFeatureToUpdate(v10, v12);
if( v13 )
{
if( v13 != 1 )
{
++v5;
v10 += 3;
continue;
}
IsUpdateModifyingOrAddingFeature = RtlpFcIsUpdateModifyingOrAddingFeature(v12);
v18 = v17 + 1;
if( !IsUpdateModifyingOrAddingFeature )
v18 = v17;
v4 = v18;
}
else
{
if( (v12->Type & 4) != 0
|| (v15 = v10[2],
v26 = *(_QWORD *)v10,
v27 = v15,
RtlpFcUpdateFeature((INT64)&v26, v14),
!RtlpFcDoesFeatureHaveUniqueState(&v26)) )
{
--v4;
}
++v5;
v10 += 3;
}
++v6;
v12 = (_HBASE_BLOCK *)((char *)v12 + 32);
}
while( v5 < v11 );
}
}
if( v6 < v8 )
{
v19 = (_HBASE_BLOCK *)((char *)v9 + 32 * v6);
v20 = v8 - v6;
do
{
v21 = RtlpFcIsUpdateModifyingOrAddingFeature(v19);
v24 = v23 + 1;
if( !v21 )
v24 = v23;
v19 = (_HBASE_BLOCK *)(v22 + 32);
v4 = v24;
--v20;
}
while( v20 );
}
LABEL_22:
if( v4 )
{
if( RtlULongLongMult(v4, 0xCui64, v7) >= 0 )
{
v25 = -1i64;
if( *v7 + 4 >= *v7 )
v25 = *v7 + 4;
*v7 = v25;
}
}
else
{
*v7 = 0i64;
}
}Referenced by:
RtlpFcUpdateFeatureConfiguration