WdipSemUpdateProviderTableWithEvent

INT64 __fastcall WdipSemUpdateProviderTableWithEvent(PGUID ProviderGuid){
  unsigned int v1; 
  INT64 ProviderTable; 
  EVENT_DESCRIPTOR *v4; 
  PSLIST_ENTRY v6; 
  GUID *v7; 
  v1 = 0;
  if( ProviderGuid )
  {
    ProviderTable = WdipSemQueryProviderTable(ProviderGuid);
    if( ProviderTable )
    {
      *(_QWORD *)ProviderGuid[2].Data4 = ProviderTable;
    }
    else if( (unsigned int)OldNumProviders >= 0x400 )
    {
      if( EtwEventEnabled(WdipSemRegHandle, (EVENT_DESCRIPTOR *)&WDI_SEM_EVENT_INIT_PROVIDER_MAX, v4) )
        WdipSemWriteProviderLimitExceededEvent(ProviderGuid);
      return(unsigned int)-1073741823;
    }
    else
    {
      v6 = WdipSemFastAllocate(2, 0x50u);
      v7 = (GUID *)v6;
      if( v6 )
      {
        memset((INT64)v6, 0i64);
        *v7 = *ProviderGuid;
        *(&WdipSemProviderTable + (unsigned int)OldNumProviders) = (INT64)v7;
        LODWORD(OldNumProviders) = OldNumProviders + 1;
        *(_QWORD *)ProviderGuid[2].Data4 = v7;
      }
      else
      {
        return(unsigned int)-1073741670;
      }
    }
  }
  else
  {
    return(unsigned int)-1073741811;
  }
  return v1;
}

Referenced by:

WdipSemUpdateProviderTableWithScenario