Если кому-то интересно ...
Я создал службу Windows в C #, которая контролирует сокет. Если клиент подключается к этому сокету, служба собирает имя порта и идентификатор устройства, который находится на этом порту, и отправляет данные в строку через com-порт, а затем клиент может проанализировать строку, чтобы получить необходимые ему данные.
В моем случае передаваемая строка:
"ACPI \ PNP0501 * PNP0501, COM1, PCI \ VEN_8086 & DEV_29B7 & SUBSYS_02111028 & REV_02 PCI \ VEN_8086 & DEV_29B7 & SUBSYS_02111028 PCI \ VEN_8086 & DEV_29B7 & CC_070002 PCI \ VEN_8086 & DEV_29B7 & CC_0700, COM3, USB \ Vid_067b & Pid_2303 & Rev_0400 USB \ Vid_067b & Pid_2303, СОМ5"
Когда я анализирую его, я вижу, что ACPI \ PNP0501 * PNP0501 - это идентификатор устройства для COM 1, для COM3 есть три идентификатора устройства и два для COM5.
Возможно, это не лучший способ справиться с этим, но он достаточно хорош для моих нужд и спас меня от JNI. :)