in src/vswhere.lib/InstanceSelector.cpp [168:211]
bool InstanceSelector::IsMatch(_In_ ISetupInstance* pInstance) const
{
_ASSERT(pInstance);
HRESULT hr = S_OK;
ISetupInstance2Ptr instance;
ISetupInstanceCatalogPtr catalog;
hr = pInstance->QueryInterface(&instance);
if (FAILED(hr))
{
// Only VS products were released before ISetupInstance2 was released, so if no workload requirements assume it matches.
return m_args.get_Requires().empty();
}
hr = pInstance->QueryInterface(&catalog);
if (SUCCEEDED(hr))
{
VARIANT_BOOL fPrerelease = VARIANT_FALSE;
hr = catalog->IsPrerelease(&fPrerelease);
if (SUCCEEDED(hr) && fPrerelease && !m_args.get_Prerelease())
{
return false;
}
}
if (!IsProductMatch(instance))
{
return false;
}
if (!IsVersionMatch(instance))
{
return false;
}
if (!IsWorkloadMatch(instance))
{
return false;
}
return true;
}