Существуют недокументированные API для поиска всех дескрипторов, открытых в системе, а затем вы можете проверить, какие из них открыты для последовательных портов. Это если пользователь всегда будет администратором, а вам нет дела до использования .Net и документированных API.
Существуют документированные API-интерфейсы для поиска всех существующих COM-портов, и затем вы можете попробовать открыть все из них. Это звучит довольно грубо и медленно, но это менее злобно, чем альтернатива.