虚拟串口需要自己分配COM口号,然后创建串口,但创建前需要确定哪些串口端口号还没有使用,避免冲突,注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter”的ComDB子项体现这个。该二进制值每一位代表对应COM口是否被占用,比如29,它的二进制:0100 1001,则从右往左数代表第1,4,7端口被占用。可以使用WDK的接口:ComDBGetCurrentPortUsage()来获取,其数量最小值为256最大值为4096,当要仲裁的串口端口号大于256则需要ComDBResizeDatabase(hComDB, (port+1023) & (~1023));增大ComDB数据库。
删除该注册表的ComDB项理论上可以清除被占用的COM口,不过怀疑操作系统只是用此注册表来显示占用情况,我试过删除了该项后打开某个应用程序后又恢复成原来的占用情况。