COM ポート データベース

システムが提供する COM ポート データベースは、システムにインストールされている COM ポートによる COM ポート番号の使用を調停します。 Microsoft Windows は、COM ポートのインストールを容易にするため、特に各ポート番号が最大でも 1 つのポートに割り当てられるようにするために、このコンポーネントを提供します。 このコンポーネントは、データベースと、データベースにアクセスするためにインストール ソフトウェアが呼び出す関数を含むライブラリで構成されます。 システムが提供する COM ポート用のインストーラーはすべて、COM ポート データベースを使用して COM ポート番号を取得します。 プラグ アンド プレイの要件ではありませんが、ベンダー提供のすべてのインストーラーは、 COM ポート データベースを使用して COM ポート番号を取得する必要があります。

COM ポート データベースをサポートするルーチンの詳細については、COMPort データベース サポート ルーチンをご覧ください:

ComDBClaimNextFreePort

ComDBClaimPort

ComDBClose

ComDBGetCurrentPortUsage

ComDBOpen

ComDBReleasePort

ComDBResizeDatabase

また、以下のルーチンも参照のこと:

SerialDisplayAdvancedSettings は、COM ポートの詳細プロパティ ページをインストールするためのシステム提供のルーチンです。

PPORT_ADVANCED_DIALOG 型のルーチンは、SerialDisplayAdvancedSettings によって呼び出される、オプションのベンダー提供のダイアログ ボックスを提供します。

インストーラーでこれらのルーチンを呼び出すには、Windows Driver Kit (WDK) で提供される msports.lib にインストーラーをリンクします。

COM ポートデータベースの構造

OM ポート データベースは要素の配列で構成され、各要素は COM ポート番号が使用中であるかどうかを示します。 最初の配列要素は COM1 に対応し、2 番目の要素は COM2 に対応し、以下同様になります。 しかし、データベースには、どのデバイスに特定のポート番号が割り当てられているかに関する情報は含まれていません。 データベースのサイズは、データベースが現在調停しているポート番号の数と等しくなります。 データベースが調停するポート番号の最小数は COMDB_MIN_PORTS_ARBITRATED、最大数は COMDB_MAX_PORTS_ARBITRATED です。 データベースのサイズは、ComDBResizeDatabase ルーチンを使用して増やすことができます。

COM ポートデータベースの開閉

COM ポート データベースを使用する前に、クライアントは ComDBOpen ルーチンを呼び出してデータベースを開き、データベースへのハンドルを取得する必要があります。 データベースへの連続的なアクセス中は、相互排除によってデータベースが保護されます。 しかし、データベースを排他的に使用するためにオープンすることはできず、その状態はデータベースへの異なるアクセス間で動的に変化する可能性があります。

COM ポート番号の現在の使用状況の確認

COM ポート データベースを開いた後、クライアントは ComDBGetCurrentPortUsage ルーチンを呼び出すことで、どの COM ポート番号がすでに使用されているかを判断できます。

クライアントは通常、以下のタスクを実行します:

  1. 現在データベースで調停されているポート番号の数を決定するルーチンを呼び出します。

  2. 呼び出し元が割り当てたビット配列またはバイト配列でポート番号の使用状況に関する情報を返すために、ルーチンを 2 回目に呼び出します。各ビットまたはバイトは、対応するポート番号が使用中かどうかを指定します。

データベース内のすべてのポート番号が使用中であるか、または現在使用可能な適切なポート番号がない場合、クライアントはデータベースのサイズを変更できます。 詳細については、COM ポート データベースのサイズ変更をご覧ください。

COM ポート番号の取得と解放

クライアントは、次のルーチンのいずれかを呼び出して COM ポート番号を取得できます:

COM ポート データベース内の COM ポート番号を要求 すると、ポート番号が「使用中」として記録されます。

クライアントは、ComDBReleasePort ルーチンを呼び出してポート番号を解放します。

COM ポートデータベースのサイズ変更

クライアントは、ComDBResizeDatabase ルーチンを呼び出して、COM ポート データベースのサイズを変更できます。 クライアントはデータベースのサイズを 1024 の整数倍までしか増やすことができません。 データベースの最大サイズは COMDB_MAX_PORTS_ARBITRATED です。