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