RtlpFcNotifyFeatureUsageTarget

NTSTATUS __stdcall RtlpFcNotifyFeatureUsageTarget(INT64 a1){
  _WNF_STATE_NAME *v1; 
  VOID **Buffer; 
  int updated; 
  UINT64 v5; 
  int v6; 
  __int64 v7; 
  UINT64 *BufferSize; 
  UINT64 CheckStamp; 
  UINT64 MatchingChangeStamp; 
  _WNF_STATE_NAME StateName; 

  StateName = *v1;
  Buffer = ExAllocatePoolWithTag(1ui64, 0x1000ui64, 1852793670i64);
  if( !Buffer )
    return -1073741801;
  do
  {
    MatchingChangeStamp = 4096i64;
    updated = ZwQueryWnfStateData(
                &StateName,
                0i64,
                0i64,
                (UINT64 *)((char *)&MatchingChangeStamp + 4),
                Buffer,
                &MatchingChangeStamp);
    if( updated >= 0 )
    {
      v5 = (unsigned int)MatchingChangeStamp;
      v6 = 0;
      if( (MatchingChangeStamp & 7) != 0 )
        v5 = 0i64;
      LODWORD(MatchingChangeStamp) = v5;
      v7 = (unsigned int)v5 >> 3;
      if( (_DWORD)v7 )
      {
        while( LODWORD(Buffer[v6]) != *(_DWORD *)a1 || WORD2(Buffer[v6]) != *(_WORD *)(a1 + 4) )
        {
          if( ++v6 >= (unsigned int)v7 )
            goto LABEL_10;
        }
      }
      else
      {
LABEL_10:
        if( (unsigned __int64)(unsigned int)v5 + 8 <= 0x1000 )
        {
          v5 = (unsigned int)(v5 + 8);
          LODWORD(Buffer[v7]) = *(_DWORD *)a1;
          WORD2(Buffer[v7]) = *(_WORD *)(a1 + 4);
          LODWORD(MatchingChangeStamp) = v5;
        }
      }
      LODWORD(CheckStamp) = 1;
      LODWORD(BufferSize) = HIDWORD(MatchingChangeStamp);
      updated = ZwUpdateWnfStateData(&StateName, Buffer, v5, 0i64, 0i64, (UINT64)BufferSize, CheckStamp);
    }
  }
  while( updated == -1073741823 );
  ExFreePoolWithTag(Buffer, 0);
  return updated;
}

Referenced by:

RtlpFcSendFeatureUsageNotifications