WmipLinkDataSourceToList

__int64 __fastcall WmipLinkDataSourceToList(__int64 a1, char a2, __int64 a3){
  __int64 v3; 
  _QWORD *v5; 
  unsigned int v8; 
  _QWORD *v9; 
  tagGUIDENTRY *GEByGuid; 
  tagGUIDENTRY **v11; 
  tagGUIDENTRY **v12; 
  tagGUIDENTRY *v13; 
  __int64 v14; 
  __int64 *v15; 

  v3 = a1 + 40;
  v5 = *(_QWORD **)(a1 + 40);
  v8 = 0;
  while( v5 != (_QWORD *)v3 )
  {
    v9 = v5 - 5;
    if( (*(_DWORD *)(v5 - 3) & 8) != 0 )
    {
      GEByGuid = WmipFindGEByGuid((_GUID *)v9[7], 0);
      if( !GEByGuid )
      {
        GEByGuid = WmipAllocGuidEntry();
        if( !GEByGuid )
          return(unsigned int)-1073741670;
        v12 = (tagGUIDENTRY **)*(&ExBootDevicesRemovedEvent + 408);
        *(_OWORD *)(GEByGuid + 18) = *(_OWORD *)v9[7];
        v13 = *v12;
        if( *((tagGUIDENTRY ***)*v12 + 1) != v12 )
          goto LABEL_16;
        *(_QWORD *)GEByGuid = v13;
        *((_QWORD *)GEByGuid + 1) = v12;
        *((_QWORD *)v13 + 1) = GEByGuid;
        *v12 = GEByGuid;
      }
      *((_DWORD *)v9 + 4) &= ~8u;
      v9[7] = GEByGuid;
      v11 = (tagGUIDENTRY **)*((_QWORD *)GEByGuid + 8);
      if( *v11 != GEByGuid + 14 )
        goto LABEL_16;
      *v9 = GEByGuid + 14;
      v9[1] = v11;
      *v11 = (tagGUIDENTRY *)v9;
      *((_QWORD *)GEByGuid + 8) = v9;
      ++GEByGuid[9];
      if( (v9[2] & 0x80000) != 0 )
        WmipRegisterEtwProvider((__int64)(v5 - 5), a3);
    }
    v5 = (_QWORD *)*v5;
  }
  if( a2 )
  {
    v14 = *(&ExBootDevicesRemovedEvent + 404);
    *(_DWORD *)(a1 + 16) |= 0x40000000u;
    v15 = *(__int64 **)(v14 + 8);
    if( *v15 != v14 )
LABEL_16:
      __fastfail(3u);
    *(_QWORD *)a1 = v14;
    *(_QWORD *)(a1 + 8) = v15;
    *v15 = a1;
    *(_QWORD *)(v14 + 8) = a1;
  }
  return v8;
}

Referenced by:

WmipAddDataSource
WmipUpdateAddGuid