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