3

新しく接続されたポートを検出し、それらの VID/PID 値を返す必要がある Windows (XP 以降) 用のデバイス検出関数を作成しています。しかし、Windows の COM ポートがどのように派生して記録されるのか、まったくわかりません。システム レジストリを見ると、Windows は VID、PID、ポート ID (つまり、COM1 COM26) などの情報を保存しているようです。そのポートはそのデバイスに固有のものですか? または、複数のエントリが同じポート ID を持つことはできますか?

また、Windows COM ポートに関する適切で完全なチュートリアルを誰かが知っている場合は、非常に高く評価されます。ありがとう!!

4

1 に答える 1

1

システムに割り当てられているすべての COM ポートを取得する場合は、COM Name Arbiter を使用できます。Windows I/O サブシステムは、レジストリの COM Name Arbiter キーに基づいて値を割り当てます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter

このキーの COMDB 値 (REG_BINARY 型) には、Windows によって割り当てられた COM ポートを示すマスクが含まれています。このリストはリトル エンディアン形式でフォーマットされているため、最初のバイトは COM1 ~ COM8 を表し、2 番目の値は COM9 ~ COM16 などを表します。最初のバイトが 0x05 の場合、バイナリでは 00000101 であるため、COM1 と COM3 が割り当てられています。

USB から UART へのブリッジ デバイスを使用しているようです。そのため、これらの COM ポートの一部は割り当てられますが、スキャンを実行するときにシステムに接続されていない可能性があります。そのため、CreateFile()、成功の確認、CloseHandle() のシーケンスをすばやく実行して、列挙中に有効性を確認することをお勧めします。

または、実際に USB to UART Bridge を使用している場合、特定の VID と PID の COM ポートを取得したいだけであれば、デバイス固有のキーの下のレジストリに保存されている可能性があります。ただし、これはハードウェア ベンダーのドライバーと列挙シーケンスに依存します。

于 2013-08-02T06:04:08.900 に答える