web-dev-qa-db-ja.com

コンピューターを別のポートに接続するたびに、コンピューターが「新しいUSBデバイス」になるのはなぜですか?

私がマウスを持っているとしましょう。このマウスをコンピューターの4スロットのうち1スロットに差し込みます。検出された新しいデバイスとそのすべてを通過しますが、問題ありません。しかし、後で同じマウスを使って戻ってきて、たとえばスロット3に差し込んだ場合は、もう一度検出が行われます。どうしてこれなの?

48
RCIX

Raymond Chen によると:

WindowsがUSBデバイスを別のポートに接続すると、USBデバイスが同じデバイスとして認識されないのはなぜですか?

USBデバイスをコンピュータに接続すると、Windowsがそれを認識して構成することに気づいたかもしれません。次に、それを取り外して別のUSBポートに再接続すると、Windowsは記憶喪失状態に陥り、前回接続したときに適用された設定を使用するのではなく、まったく別のデバイスであると見なします。何故ですか?

USBデバイスの人々は、これはデバイスにUSBシリアル番号がない場合に起こると説明しました。

USBデバイスでは、シリアル番号はオプションです。デバイスにデバイスがある場合、Windowsは、どのUSBポートに接続しても、デバイスを認識します。ただし、シリアル番号がない場合、Windowsは異なるUSBポート上の各外観を新しいデバイスのように扱います。

(私は、USBデバイスの1つの主要な製造元がシリアル番号がどのように機能するかを完全に理解していなかったことを覚えています。彼らはすべてのデバイスにシリアル番号を与えました、それは素晴らしいですが、彼らはすべて同じシリアル番号を取得しました。それらの2つを差し込むとエキサイティングなことが起こりましたデバイスを同時にコンピューターに挿入します。)

しかし、シリアル番号がなく、別のポートに表示される場合、Windowsはなぜそれを別のデバイスとして扱うのですか? 「ああ、あそこにいるよ、あそこにある別の港にいるよ」としか言えないのです

そのようなデバイスを2つ接続すると、ランダムな動作が作成されるためです。プラグアンドプレイによってデバイスが列挙される順序に応じて、2つの設定セットは、起動ごとにランダムに割り当てられます。今日、設定は1つの方法で一致しますが、明日、デバイスが別の順序で列挙されると、設定が入れ替わります。 (デバイスを別の順序で接続すると、同様に不可解な動作が発生します。)

言い換えると、(1)物事はすでに悪い状態にあり、デバイスに適切なシリアル番号があれば問題にはならなかったので、物事はうまくいきません。(2)この悪い状態になると、代替案はより多くの物を吸います。 USBスタックは、悪い状況を悪化させることなく、悪い状況を最大限に活用しようとしています。

62
jasonh

Windows(あなたがOSとは言っていないので、これはあなたが使用しているものだと思います)は、デバイスが接続されているポートにデバイスを関連付けます。そのため、「ポートXのUSBディスクA」は「USBディスクAポートY "を指定すると、それに応じてドライバとレジストリエントリがリンクされます。

デバイスマネージャーを表示するときに[接続されていないデバイスを表示する]オプションを使用すると、これまで接続されていたすべてのポートに接続されているデバイスが表示されますが、現在ポートには含まれていません。デバイスをこれらのポートのいずれかに接続すると、Windowsはそのドライバーインスタンスをアクティブ化するだけです。別のポートに接続すると、アクティブ化する前にそのポートの新しいドライバーインスタンスを定義する必要があります(これはユーザーとして表示されるプロセスです) 「新しいデバイスを追加しています」と表示されます。

これにより、同じデバイスを同時に異なるポートに接続することができます。これを実現する方法は他にもありますが、OSが使用する手法はエンドユーザーにほとんどまたはまったく影響しませんが、Windowsがそれを調整する方法を選択します。

2
David Spillett