COM 端口数据库

系统提供的 COM 端口数据库通过系统上安装的 COM 端口来仲裁 COM 端口号的使用。 Microsoft Windows 提供此组件以方便安装 COM 端口,特别是确保每个端口号最多分配给一个端口。 该组件由数据库和包含安装软件调用以访问数据库的函数的库组成。 系统提供的所有 COM 端口安装程序都使用 COM 端口数据库来获取 COM 端口号。 虽然不是即插即用要求,但供应商提供的所有安装程序也应使用 COM 端口数据库来获取 COM 端口号。

有关支持 COM 端口数据库的例程的信息,请参阅 COMPort 数据库支持例程:

ComDBClaimNextFreePort

ComDBClaimPort

ComDBClose

ComDBGetCurrentPortUsage

ComDBOpen

ComDBReleasePort

ComDBResizeDatabase

另请参阅以下例程:

SerialDisplayAdvancedSettings,它是系统提供的例程,用于为 COM 端口安装高级属性页

PPORT_ADVANCED_DIALOG类型的例程,它提供由 SerialDisplayAdvancedSettings 调用的可选供应商提供的对话框

若要在安装程序中调用这些例程,请将安装程序链接到 msports.lib,后者随 Windows 驱动程序工具包 (WDK) 一起提供。

COM 端口数据库的结构

COM 端口数据库由一个元素数组组成,每个元素都指示是否正在使用 COM 端口号。 第一个数组元素对应于 COM1,第二个数组元素对应于 COM2,依此。 但是,数据库不包含有关为哪个设备分配了给定端口号的任何信息。 数据库的大小等于数据库当前仲裁的端口号数。 数据库仲裁的最小端口号COMDB_MIN_PORTS_ARBITRATED,仲裁的最大端口号为COMDB_MAX_PORTS_ARBITRATED。 可以使用 ComDBResizeDatabase 例程增加数据库的大小。

打开和关闭 COM 端口数据库

在使用 COM 端口数据库之前,客户端必须通过调用 ComDBOpen 例程来打开数据库,以获取数据库的句柄。 在任何连续数据库访问期间,数据库都受到相互排斥的保护。 但是,无法打开数据库以供独占使用,并且其状态可以在对数据库的不同访问之间动态更改。

确定 COM 端口号的当前使用情况

打开 COM 端口数据库后,客户端可以通过调用 ComDBGetCurrentPortUsage 例程来确定哪些 COM 端口号已在使用中。

客户端通常执行以下任务:

  1. 调用例程以确定数据库中当前正在仲裁的端口号数。

  2. 再次调用例程以返回有关调用方分配的位数组或字节数组中的端口号使用情况的信息,其中每个位或字节指定是否正在使用相应的端口号。

如果数据库中的所有端口号都在使用中,或者当前没有合适的端口号可用,则客户端可以调整数据库的大小。 有关详细信息,请参阅调整 COM 端口数据库的大小。

获取和释放 COM 端口号

客户端可以通过调用以下例程之一来获取 COM 端口号:

COM 端口数据库中声明 COM 端口号会将端口号记录为“正在使用”。

客户端通过调用 ComDBReleasePort 例程来释放端口号。

调整 COM 端口数据库的大小

客户端可以通过调用 ComDBResizeDatabase 例程来调整 COM 端口数据库的大小。 客户端只能将数据库的大小增加 1024 的整数倍数。 数据库的最大大小COMDB_MAX_PORTS_ARBITRATED。