На сегодняшний день мы делаем так !! с ипользованием Setup Device Information api (Написано в Builder С++)
Код
try
{
HDEVINFO hDI;
Tstring List *sl_com_fullnames = new TStringLis();
SP_DEVINFO_DATA DDI;
DWORD uReq, uTyp, uEnum;
BOOL fErr;
char IdBuffer[ 1024 ];
DDI.cbSize = sizeof( SP_DEVINFO_DATA );
//Получение GUID_DEVCLASS_MULTIPORTSERIAL
hDI = SetupDiGetClassDevs( &GUID_DEVCLASS_MULTIPORTSERIAL, NULL, NULL,
DIGCF_PRESENT | DIGCF_PROFILE );
uEnum = 0;
do
{
fErr = SetupDiEnumDeviceInfo( hDI, uEnum, &DDI );
if( !fErr )
break;
fErr = SetupDiGetDeviceRegistryProperty( hDI, &DDI, SPDRP_FRIENDLYNAME,
&uTyp, IdBuffer, 1024, &uReq );
if( !fErr )
fErr = SetupDiGetDeviceRegistryProperty( hDI, &DDI, SPDRP_DEVICEDESC,
&uTyp, IdBuffer, 1024, &uReq );
sl_com_fullnames->Add( IdBuffer);
uEnum ++;
} while( 1 );
//Устройств GUID_DEVCLASS_PORTS
hDI = SetupDiGetClassDevs( &GUID_DEVCLASS_PORTS, NULL, NULL,
DIGCF_PRESENT | DIGCF_PROFILE );
uEnum = 0;
do
{
fErr = SetupDiEnumDeviceInfo( hDI, uEnum, &DDI );
if( !fErr )
break;
fErr = SetupDiGetDeviceRegistryProperty( hDI, &DDI, SPDRP_FRIENDLYNAME,
&uTyp, IdBuffer, 1024, &uReq );
if( !fErr )
fErr = SetupDiGetDeviceRegistryProperty( hDI, &DDI, SPDRP_DEVICEDESC,
&uTyp, IdBuffer, 1024, &uReq );
sl_com_fullnames->Add( IdBuffer );
uEnum ++;
} while( 1 );
Цитата(V_G @ Mar 5 2010, 13:07)

По-моему, любой порт поддерживает любое сочетание параметров, какое зададите (во вменяемом диапазоне, понятно).
В терминале (родном виндовом) у меня у хардовых портов можно выставить скорость до 115 кБод (по-моему), у виртуальных (USB-COM) - до 960 кБод.
По сути это должно определяться драйвером, тесно привязанным к аппаратуре.
Я вроде знаю для того тчобы узнать настройки, Вы должны открыть порт и запустить функцию GetCommProperties. А она даем Вам что умеет порт.