RtlpFcUpdateUsageTriggers

void __fastcall RtlpFcUpdateUsageTriggers(
        _DWORD *a1,
        __int64 a2,
        int *a3,
        unsigned __int64 a4,
        _DWORD *a5,
        unsigned __int64 *a6){
  int *v7; 
  int v9; 
  _DWORD *v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  _DWORD *v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  INT64 v18; 
  _OWORD *v19; 
  NTSTATUS v20; 
  __int128 *v21; 
  __int128 v22; 
  __int64 v23; 
  unsigned __int64 v24; 
  INT64 *v25; 
  UINT64 v26; 
  UINT64 v27; 
  unsigned __int64 v28; 
  int *v29; 

  v29 = a3;
  v28 = 0i64;
  v7 = a3;
  qsort((UINT64)a3, a4, 0x14ui64, (INT64)RtlpFcCompareUsageSubscriptionUpdates, v25, v26, v27);
  RtlpFcCalculateRequiredSizeForNewUsageSubscriptionTable(a1, v7, a4, &v28);
  if( v9 >= 0 )
  {
    if( v28 )
    {
      if( v28 <= *a6 )
      {
        v10 = a5;
        v11 = 0i64;
        v12 = 0i64;
        *a5 = 0;
        v13 = (unsigned __int64)(v10 + 1);
        v28 = (unsigned __int64)(v10 + 1);
        if( a1 )
        {
          v14 = (unsigned int)*a1;
          v15 = a1 + 1;
          if( (_DWORD)v14 )
          {
            v16 = (__int64)v7;
            LODWORD(v17) = *a1;
            v18 = (INT64)(v7 + 1);
            v19 = a1 + 1;
            do
            {
              v14 = (unsigned int)v17;
              if( v12 >= a4 )
                break;
              v20 = RtlpFcCompareUsageSubscriptionToUsageSubscription((INT64)v19, v18);
              if( v20 )
              {
                if( v20 == 1 )
                {
                  RtlpFcAddUsageSubscriptionFromUpdate(v16, v10, (__int64 *)&v28);
                  v13 = v28;
                  ++v12;
                  v16 += 20i64;
                  v18 += 20i64;
                }
                else
                {
                  ++v11;
                  *(_OWORD *)v13 = *v19;
                  ++*v10;
                  v13 += 16i64;
                  v28 = v13;
                  ++v19;
                }
              }
              else
              {
                if( !*(_DWORD *)v16 )
                {
                  *(_OWORD *)v13 = *v19;
                  *(_WORD *)(v13 + 6) = *(_WORD *)(v16 + 10);
                  v13 += 16i64;
                  ++*v10;
                  v28 = v13;
                }
                ++v11;
                ++v19;
                ++v12;
                v16 += 20i64;
                v18 += 20i64;
              }
              v17 = (unsigned int)*a1;
              v14 = v17;
            }
            while( v11 < v17 );
            v7 = v29;
            v15 = a1 + 1;
          }
          if( v11 < v14 )
          {
            v21 = (__int128 *)&v15[4 * v11];
            do
            {
              v22 = *v21;
              ++v11;
              ++v21;
              *(_OWORD *)v13 = v22;
              ++*v10;
              v13 += 16i64;
            }
            while( v11 < (unsigned int)*a1 );
            v28 = v13;
          }
        }
        if( v12 < a4 )
        {
          v23 = (__int64)&v7[5 * v12];
          v24 = a4 - v12;
          do
          {
            RtlpFcAddUsageSubscriptionFromUpdate(v23, v10, (__int64 *)&v28);
            v23 += 20i64;
            --v24;
          }
          while( v24 );
        }
      }
      else
      {
        *a6 = v28;
      }
    }
    else
    {
      *a6 = 0i64;
    }
  }
}

Referenced by:

CmFcManagerUpdateFeatureUsageSubscriptions