ReAlЕсли брать по большому счету ,то у вас проблема ,которой не существует

Если ваш драйвер не поддерживает выражения типа :
Код
тыры-пыры_имя_драйвера.тыры-пыры_назначить_порт=1 или 2 или 3
а требует только базовый адресс ,то пошлите его лесом гулять,и подыщите нормальный.
Не нужно будет извращаться с копаниями в реестре вообще.
К примеру если для LPT нужно ,есть драйвер TVicPort ,ложится под любой язык ,начиная с Билдера кончая .NET .
Сам определяет какие есть порты ,сколько их,какие у них базовые адресса,дергает любой ногой,
есть даже дополнительные фичи - типа определить серийник винта или назначить лицензию на определенное количество дней .
Можно и другой подыскать на свой вкус.
Я с LPT редко работал ,поэтому коллекцию себе не собирал.
ИМХО если чтото новое мутить ,то лучше на LPT и не закладываться,но это дело хозяйское

Насчет СОМ ,функции CreateFile, ReadFile, SetupComm, WriteFile и т.д. у меня в коде они есть,я выдернул с инета уже четыре варианта и у всех одна и таже проблема с пропуском байтов.
Если подкинете свой рабочий вариант ,с меня будет пиво и уважуха