Поделиться через


База данных портов COM

Предоставляемая системой база данных COM-портов определяет использование номеров COM-портов на com-портах , установленных в системе. Microsoft Windows предоставляет этот компонент для упрощения установки COM-портов и, в частности, для обеспечения того, чтобы каждый номер порта был назначен не более одного порта. Компонент состоит из базы данных и библиотеки, содержащей функции, которые программное обеспечение установки вызывает для доступа к базе данных. Все системные установщики для COM-портов используют базу данных com-портов для получения номера COM-порта. Хотя это и не является Plug and Play требованием, все предоставляемые поставщиком установщики также должны использовать базу данных com-портов для получения номера COM-порта.

Сведения о подпрограммах, поддерживающих базу данных com-портов, см. в разделе Процедуры поддержки базы данных COMPort:

ComDBClaimNextFreePort

ComDBClaimPort

ComDBClose

ComDBGetCurrentPortUsage

ComDBОткрыть

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-портов клиент может определить, какие номера COM-портов уже используются, вызвав подпрограмму ComDBGetCurrentPortUsage .

Клиент обычно выполняет следующие задачи:

  1. Вызывает подпрограмму, чтобы определить, сколько номеров портов в настоящее время выполняется в базе данных.

  2. Вызывает подпрограмму во второй раз для возврата сведений об использовании номера порта в выделенном вызывающим объектом битовом массиве или массиве байтов, где каждый бит или байт указывает, используется ли соответствующий номер порта.

Если используются все номера портов в базе данных или нет подходящего номера порта, клиент может изменить размер базы данных. Дополнительные сведения см. в разделе Изменение размера базы данных com-портов.

Получение и освобождение номера порта COM

Клиент может получить номер COM-порта, вызвав одну из следующих процедур:

  • ComDBClaimNextFreePort, который утверждает наименьший доступный номер порта.

  • ComDBClaimPort, который пытается запросить определенный номер порта.

При запросе номера COM-порта в базе данных COM-портов номер порта регистрируется как "используемый".

Клиент освобождает номер порта, вызывая подпрограмму ComDBReleasePort .

Изменение размера базы данных com-портов

Клиент может изменить размер базы данных com-портов, вызвав подпрограмму ComDBResizeDatabase . Клиент может увеличить размер базы данных только целым числом, кратным 1024. Максимальный размер базы данных — COMDB_MAX_PORTS_ARBITRATED.