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