WmipUpdateAddGuid

UINT64 __stdcall WmipUpdateAddGuid(
        tagDATASOURCE *DataSource,
        WMIREGGUIDW *RegGuid,
        WMIREGINFOW *WmiRegInfo,
        UINT64 BufferSize,
        tagInstanceSet **AddModInstanceSet){
  unsigned int v6; 
  _QWORD *v9; 
  unsigned int v10; 
  volatile signed __int64 *v11; 
  UINT64 result; 
  _QWORD *v13; 
  tagDATASOURCE *v14; 
  __int64 v15; 
  UINT64 ProviderId; 

  v6 = BufferSize;
  v9 = WmipAllocEntry((__int64)&stru_140C00F40 + 4496);
  v10 = 0;
  v11 = v9;
  if( !v9 )
    return 0i64;
  *((_DWORD *)v9 + 4) |= 8u;
  v13 = v9 + 5;
  v9[7] = RegGuid;
  v9[8] = DataSource;
  v14 = DataSource + 10;
  v15 = *((_QWORD *)DataSource + 5);
  if( *(tagDATASOURCE **)(v15 + 8) != DataSource + 10 )
    __fastfail(3u);
  *v13 = v15;
  v13[1] = v14;
  *(_QWORD *)(v15 + 8) = v13;
  *(_QWORD *)v14 = v13;
  LODWORD(ProviderId) = DataSource[14];
  if( WmipBuildInstanceSet(RegGuid, WmiRegInfo, v6, (tagInstanceSet *)v11, ProviderId) < 0 )
  {
    WmipUnreferenceEntry((__int64)&stru_140C00F40 + 4496, v11);
    return 0i64;
  }
  LOBYTE(v10) = (int)WmipLinkDataSourceToList((__int64)DataSource, 0, 0i64) >= 0;
  result = v10;
  *AddModInstanceSet = (tagInstanceSet *)v11;
  return result;
}

Referenced by:

WmipUpdateModifyGuid