Я сам недавно столкнулся с похожей проблемой. Кстати сами микрософтовцы не рекомендуют использовать рилейт имена.
Связать с помощью стандартной апи хэндл с айди видимо не получиться.
DeviceIoControl не подойдет, сам не до конца разобрался, но получение айди можно реализовать, насколько понял, только для накопителей (IOCTL_STORAGE...).
Как варинт использовать DriverKit (дремучий лес =) ), или вот, что собственно хочу попробовать реализовать:
DeviceManager Object (
http://msdn.microsoft.com/en-us/library/ms630500%28VS.85%29.aspx)
Может оказаться весьма полезным, в том плане, что построено на событиях. Его будет удобно использовать, ессли программа создает дополнительные трэды (отпадают вопросы приостановки работы драйвера и т.п.). Вроди бы как оно должно принимать значение истины, когда устройство с указанным айди подключено, или используется и там еще есть параметры.
По поводу привязки к хэндлу, думаю попробовать пойти обратным путем — по айди получить хэндл. Возможно запросить логическое имя порта и тот же CreateFile использовать. Еще пока не уверен точно.
Пишу на ASM-е, поэтому еще не уверен, что такие вещи есть в библиотеке (в крайнем случае придется переписать). Если у Вас что-нибудь получиться — отпишите тут пожалуйста, как говорится одна голова хорошо, а две — лучше. =)