Windows における USB - よくあるご質問

このトピックでは、USB デバイスとドライバーの開発と Windows オペレーティング システムへの統合が初めてのドライバー開発者向けによく寄せられる質問を紹介します。

USB に関する多くの用語がほぼ同じ意味で使われているのを耳にします。 それらは一体どういう意味なのでしょうか?

「USB 3.0 のおかげで、SuperSpeed USB サム ドライブを PC の xHCI ホスト コントローラーに接続し、ファイルをより速くコピーできます」のようなメッセージが表示されたとします。

この文の USB 用語を理解しましょう。 USB 3.0、USB 2.0、USB 1.0 は、USB 実装フォーラムの USB 仕様リビジョン番号を指します。 USB 仕様では、ホスト PC と USB デバイスが相互にコミュニケーションする方法を定義します。

バージョン番号は、最大伝送速度も示します。 最新の仕様リビジョンは USB 3.0 で、最大 5 Gbps の最大伝送速度が規定されています。 USB 1.0 では、Low-Speed USB (最大 1.5 Mbps) と Full-Speed USB (最大 12 Mbps) という 2 つの異なるデータ レートが定義されています。 USB 2.0 は、Low-Speed および Full-Speed のデバイスのサポートを維持しながら、新しいデータ レートである Hi-Speed USB (480 Mbps) を定義します。 USB 3.0 は、以前に定義されたすべてのデータ レートで引き続き動作します。 製品パッケージを見ると、SuperSpeed USB は最新の USB 3.0 デバイスを参照しています。 Hi-Speed USB は、Hi-Speed USB 2.0 デバイスを表すために使用されます。 記述子のない USB は、Low-Speed デバイスと Full-Speed デバイスを指します。

USB プロトコルに加えて、デバイスが接続される PC 上のハードウェアである USB ホスト コントローラーにも 2 番目の仕様があります。 ホスト コントローラー インターフェイス仕様は、ホスト コントローラーのハードウェアとソフトウェアがどのように相互作用するかを定義します。 eXtensible ホスト コントローラー インターフェイス (xHCI) は、USB 3.0 ホスト コントローラーを定義します。 拡張ホスト コントローラー インターフェイス (EHCI) は、USB 2.0 ホスト コントローラーを定義します。 ユニバーサル ホスト コントローラー (UHCI) とオープン ホスト コントローラー (OHCI) は、USB 1.0 ホスト コントローラーの 2 つの代替実装です。

PC に USB 3.0 ポートはありますか?

USB 3.0 ポートには SuperSpeed USB ロゴが付いているか、通常は青色のポートがあります。

port with usb logo

blue usb 3.0 port

新しい PC には、USB 3.0 ポートと USB 2.0 ポートの両方があります。 SuperSpeed USB デバイスを最高速度で動作させたい場合は、USB 3.0 ポートを見つけて、デバイスをそのポートに接続します。 USB 2.0 ポートに接続された SuperSpeed デバイスは、高速で動作します。

また、特定のポートがデバイス マネージャーの USB 3.0 ポートであることを確認することもできます。 Windows Vista 以降のバージョンの Windows で、デバイス マネージャーを開き、一覧からポートを選択します。

usb host controllers in device manager

拡張可能なホスト コントローラーがある場合は、USB 3.0 がサポートされます。

eXtensible ホスト コントローラーのドライバーをインストールする必要がありますか?

Windows 8 および Windows Server 2012 には USB 3.0 のサポートが含まれています。

PC に USB 3.0 ポートがあり、Windows 8 より前のバージョンの Windows を実行している場合、ホスト コントローラー ドライバーは PC の製造元から提供されます。 これらのドライバーを再インストールする必要がある場合は、製造元から入手する必要があります。

Windows 8 より前のバージョンの Windows を実行している PC に USB 3.0 コントローラ カードを追加した場合は、コントローラ カードの製造元が提供するドライバをインストールする必要があります。

Windows 8 では、マイクロソフトが提供する USB 3.0 ドライバーのセット (USB ドライバー スタック) は、ほとんどのホスト コントローラーで動作します。 Microsoft USB 3.0 ドライバー スタックは、Fresco Logic FL1000 コントローラーでは動作しません。 FL1000 コントローラーがあるかどうかを判断するには、デバイス マネージャーを開き、ユニバーサル シリアル バス コントローラーを展開します。 コントローラー ノードを選択して保持 (または右クリック) して、コントローラーのプロパティを表示します。 [詳細] タブで、一覧から [ハードウェアID] プロパティを選択します。 ハードウェア ID が PCI\VEN_1B73&DEV_1000 で始まる場合、それは FL1000 です。 そのコントローラーについては、PC またはコントローラー カードの製造元からドライバーをダウンロードしてインストールします。

システムに複数のホスト コントローラーが表示される理由

PC に接続する USB デバイスに加えて、Web カメラ、指紋リーダー、SD カード リーダーなど、USB 経由で接続できるデバイスが PC 内に統合されています。 これらのデバイスをすべて接続し、外部 USB ポートを提供するために、PC はいくつかの USB ホスト コントローラーをサポートしています。

USB 3.0 xHCI ホスト コントローラーは、すべての USB デバイス速度、SuperSpeed、High-Speed、Full-Speed、Low-Speed と完全に下位互換性があります。 任意のデバイスを xHCI コントローラーに直接接続し、そのデバイスが動作することを期待できます。 EHCI コントローラーの場合は、そうではありません。 USB 2.0 仕様はすべての速度のデバイスをサポートしますが、EHCI コントローラーは Hi-Speed USB デバイスのみをサポートします。 Full-Speed および Low-Speed USB デバイスが動作するには、USB 2.0 ハブを介して EHCI コントローラに接続するか、UHCI または OHCI コントローラに接続する必要があります。

新しい PC の場合、PC によって公開されるほとんどの USB 2.0 ポートは、USB 2.0 ハブの下流です。 このハブは EHCI コントローラーに接続されています。 これにより、PC の USB 2.0 ポートをすべての速度のデバイスで動作させることができます。 SuperSpeed デバイスは、2.0 ポートに接続されると高速デバイスとして動作します。

USB 2.0 仕様がリリースされた後、PC はデバイスのあらゆる速度をサポートするためにホスト コントローラーを組み合わせて使用しました。 1 つの USB 2.0 ポートは、EHCI ホスト コントローラと UHCI または OHCI ホスト コントローラのいずれかの 2 つのホスト コントローラに接続されます。 デバイスを接続すると、ハードウェアは 2 つのホストのいずれかに接続を動的にルーティングします。 ルーチンは、デバイスの速度によって異なります。

USB 3.0 ハブを 1 つだけ接続している場合、デバイス マネージャーに 2 つのハブが表示されるのはなぜですか?

xHCI ホスト コントローラーは任意の速度のデバイスで動作しますが、SuperSpeed ハブは SuperSpeed デバイスでのみ機能します。 USB 3.0 ハブがすべての速度で動作できるようにするには、SuperSpeed ハブと USB 2.0 ハブの 2 つの部分があります。 USB 3.0 ハブは、デバイスの速度に基づいて、SuperSpeed ハブまたは 2.0 ハブにデバイスを動的にルーティングすることで、すべての速度をサポートできます。

[デバイス マネージャー] を開き、接続でデバイスを表示し、eXtensible ホスト コントローラーを見つけます。 1 つの USB 3.0 ハブを USB 3.0 ポートに接続すると、コントローラのルート ハブの下流に 2 つのハブが存在します。

usb 3.0 hub in device manager

次の例では、SuperSpeed USB ストレージ デバイスと USB オーディオ デバイスの両方が USB 3.0 ハブに接続されています。 ストレージ デバイスが SuperSpeed ハブのダウンストリームにあり、オーディオ デバイスが USB 2.0 ハブの下流にあることがわかります。

usb 3.0 hub with connected devices in device manager

2.0 ポートに接続されているデバイスに対して読み込まれるドライバーのセットはどれですか?

ホスト コントローラーの種類ごとに異なるバイナリ セットが読み込まれます。 Windows が読み込む USB ドライバー スタックは、接続されたデバイスの速度ではなく、ホスト コントローラーの種類に相関していることを理解することが重要です。

このイメージでは、さまざまな種類の USB ホスト コントローラーごとにどのドライバーが読み込まれているかがわかります。

usb driver stack in windows 8

USB 3.0 ポートが xHCI コントローラーに正しくルーティングされている場合、Windows は xHCI ドライバー スタック (USB 3.0 ドライバー スタックとも呼ばれます) を読み込みます。

USB 2.0 ポートが USB 2.0 ハブを介して EHCI コントローラに接続されている場合、トラフィックは EHCI コントローラを経由して移動し、USB 2.0 ドライバ スタックがロードされます。

USBドライバー スタック内のドライバーの詳細については、「Windows の USB ホスト側ドライバー」を参照してください。

PC の USB 2.0 ポートでコンパニオン コントローラーを使用する場合、ポートのルーティング先のホスト コントローラーはデバイスの速度によって異なります。 たとえば、Low-Speed デバイスは UHCI または OHCI コントローラーを介して接続し、USBUHCI または USBOHCI ドライバーを使用します。 PC は高速デバイスを EHCI コントローラーにルーティングするため、Windows は USBEHCI ドライバーを使用します。

デバイスの速度が異なると、コントローラーに読み込まれるドライバーが決まります。 ただし、デバイスの速度が異なると、使用するコントローラーが決まる場合があります。 コントローラーは常に同じドライバーを使用します。

USB 3.0 デバイスが SuperSpeed として動作しているかどうかを判断操作方法?

Windows 8 では、まず、USB 3.0 ポートと xHCI ホスト コントローラーがあることを確認します。 SuperSpeed USB デバイスが xHCI ホスト コントローラーに接続されている場合、Windows 8 では Windows 8 UI の特定の部分に「USB 3.0 に接続されました」というメッセージが表示されます。 デバイスが XHCI コントローラーではなく EHCI コントローラーに接続されている場合、代わりに「USB 3.0 に接続するとデバイスのパフォーマンスが向上します」というメッセージが表示されます。

PC 設定でこれらの UI メッセージを表示できます。

  1. チャーム バーを開きます (カーソルを画面の右上隅にドラッグするか、Windows キー + C を入力するか、指で右からスワイプします)。
  2. [設定]、[PC 設定の変更] の順に選択します。
  3. [PC の設定] で [デバイス] を選択します。

この画像は、USB 3.0 デバイスが SuperSpeed で動作している場合の UI メッセージを示しています。

Screenshot that shows

この画像は、USB デバイスが SuperSpeed より低いバス速度で動作している場合の UI メッセージを示しています。

Screenshot that shows

これらの画像に示すように、デバイスとプリンターで同様のメッセージを表示できます。

Screenshot that shows

superspeed device operating at high-speed

USB 3.0 デバイスがストレージ デバイスの場合、ボリューム ラベルが選択されると、Windows エクスプローラーに次のような同様のメッセージが表示されます。 メッセージを表示するには、[表示 -> 詳細] ペインを選択する必要があることに注意してください。

Screenshot that shows a superspeed U S B device selected in

superspeed usb device operating at high-speed

デバイス ドライバーを作成する場合は、Windows Driver Kit (WDK) に含まれる USBView ツールが非常に便利です。 Windows 8 WDK の場合、Microsoft は SuperSpeed USB 情報を表示するように USBView を更新しました。 このツールを使用して、デバイスが SuperSpeed で動作しているかどうかを判断できます。 この図は、USBView の SuperSpeed で動作している USB 3.0 デバイスを示しています。

superspeed usb device operating at superspeed

デバイス ドライバー開発者の場合、USB ドライバー スタックは、USB 3.0 デバイスの速度情報のクエリに使用できる、IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 と呼ばれる新しい IOCTL を公開します。

SuperSpeed USB デバイスが同等の Hi-Speed USB デバイスよりも高速でないのはなぜですか?

一般に、USB 3.0 USB デバイスが Hi-Speed USB デバイスよりも高速でない場合、SuperSpeed でのパフォーマンスは得られません。 SuperSpeed USB デバイスが USB 3.0 ポートに接続されている場合、次の理由により SuperSpeed で動作しない可能性があります。

  • USB 2.0 ハブを使用している。

    ハブを使用している場合は、それが USB 3.0 ハブであることを確認します。 USB 2.0 ハブを使用している場合、接続されている SuperSpeed USB デバイスは高速で動作します。 ハブを USB 3.0 ハブに交換するか、デバイスを USB 3.0 ポートに直接接続します。

  • USB 3.0 ハブのファームウェアが古い。

    一部の以前の USB 3.0 ハブは正常に動作しませんでした。 その結果、Windows はこれらのハブの 2.0 部分のみを使用します。 この図に示すように、デバイス マネージャーで「機能しない」ハブが示された場合、Windows 8 はハブの 3.0 部分を使用していません。

    non functional superspeed usb hub

    SuperSpeed デバイスを USB 3.0 ポートに直接接続するか、ハブのファームウェアを更新することができます。 Windows 8 では、新しいファームウェアを持つハブが認識されます。

  • デバイスは USB 2.0 ケーブルで接続されています。

    デバイスの接続に使用するケーブルが USB 3.0 ケーブルであることを確認します。 USB 3.0 ケーブルに信号整合性の問題がある可能性もあります。 その場合、デバイスが高速に切り替わります。 その場合は、別の USB 3.0 ケーブルを使用する必要があります。

  • デバイスのファームウェアが古い。

    製造元の Web サイトから最新バージョンを入手して、SuperSpeed USB デバイスのファームウェアを更新します。 一部の SuperSpeed USB デバイス製造元は、ファームウェアの更新プログラムとして、デバイスで見つかったバグに関する修正プログラムをリリースします。

  • ホスト コントローラーのファームウェアが古い。

    PC の製造元のサイトまたはアドイン カードの製造元のサイトから最新バージョンを入手して、USB 3.0 コントローラのファームウェアを更新します。 一部の USB 3.0 コントローラの製造元は、コントローラで見つかったバグの修正をファームウェアの更新プログラムとしてリリースしています。

  • システムの BIOS が最新ではない。

    PC メーカーから最新バージョンを入手して、システムの BIOS を更新します。 一部のマザーボードでは、BIOS が xHCI ホスト コントローラーに接続されているデバイスを EHCI コントローラーに誤ってルーティングする可能性があります。 この不適切なルーティングにより、SuperSpeed USB デバイスが高速で動作します。 BIOS 更新プログラムでこの問題を解決できます。

1 つのハードウェアに複合デバイスと複合デバイスを含めることは可能ですか?

はい。 3 ポートのバスパワーハブを備えた Microsoft Natural Keyboard Pro は、複合複合 USB デバイスの一例です。 デバイスには、ポート 1 に接続された複合デバイスがあります。 2 つの追加ポートがエンド ユーザーに公開されます。

ポート 1 に接続されているデバイスは、Low-Speed 複合デバイスです。 このデバイスには 2 つのインターフェイスがあり、どちらもヒューマン インターフェイス デバイス (HID) の USB 標準デバイス クラス定義に準拠しています。 複合デバイスは、トップレベルのコレクションを使用して単一の HID インターフェイス上ですべてのコレクションを多重化するのではなく、2 つの HID インターフェイスを提供します。 この設計は、古い BIOS との互換性のために選択されました。

一部の USB デバイスが新しいポートに移動されたときに再インストールされるのはなぜですか?

Windows 2000 以降のオペレーティング システムでは、USB デバイスをあるポートから別のポートに移動すると、新しい物理デバイス オブジェクト (PDO) が作成されます。 ハードウェアが一意の USB シリアル番号を報告する場合、新しい PDO は作成されません。

同じ PDO を再利用し、デバイスが同じポートに再挿入されても新しいポートに再挿入されてもデバイス エクスペリエンスが変わらないことを保証するには、ハードウェア ベンダーはデバイスにシリアル番号を保存する必要があります。 Windows ハードウェア認定プログラムの要件に従って、シリアル番号は、デバイス インストール ID を共有するすべてのデバイスで一意である必要があります。

USB 製品パッケージの設計に関する推奨事項の一覧はありますか?

USB-IF は、マイクロソフトおよび他の USB-IF メンバー企業と協力して、独立系ハードウェア ベンダーがパッケージに記載する推奨事項のリストを作成しました。

詳細については、USB の Web サイトを参照してください。

USB Hi-Speed および SuperSpeed については、以下を参照してください: https://www.usb.org/

USB 3.0 デバイスをサポートするためにクライアント ドライバーを書き換える必要がありますか?

Low-Speed、Full-Speed、または High-Speed のデバイスが USB 3.0 ポートに接続されている場合、既存のすべてのクライアント ドライバーはそのまま動作し続ける必要があります。 Windows 8 では、既存のクライアント ドライバーとの互換性が確保されています。

USB 3.0 ドライバー スタックは、IRQL レベル、呼び出し元のコンテキスト、およびエラー ステータスを維持します。デバイスと対話するときの再試行の頻度とタイミングなど、既存のドライバーが引き続き動作することを確認します。 テストは依然として非常に重要です。

一般的なエラーは、次の理由で発生します。

  • SuperSpeed エンドポイント コンパニオン記述子の存在により、ドライバーのエンドポイント記述子の解析が中断されます。
  • 速度が向上するため、アプリケーション プロトコル レベルでタイミングの問題が発生する可能性があります。
  • エンドポイントでサポートされる最大パケット サイズが異なる場合があります。
  • 機能の電源管理により、選択的な一時停止操作のタイミングが異なる場合があります。

Windows 7 以前のバージョンのオペレーティング システムでは、USB 3.0 ドライバー スタックはサードパーティによって提供されます。 したがって、ドライバーがサードパーティの USB ドライバー スタックで動作するかどうかをテストすることを強くお勧めします。

高速および SuperSpeed USB デバイス用の Windows 8 の新しいクライアント ドライバーでは、新機能を選択する必要があります。

SuperSpeed ストレージ デバイスを使用するには、Uaspstor.sys と Usbstor.sys のどちらのドライバーが読み込まれていますか?

USB Attached SCSI (UAS) プロトコルは、確立された USB 大容量ストレージ プロトコルであるバルクオンリー トランスポート (BOT) のパフォーマンスを向上させるために設計された新しい大容量ストレージ プロトコルです。 これは、プロトコルのオーバーヘッドを削減し、SATA ネイティブ コマンド キューイング (NCQ) をサポートし、複数のコマンドを並列処理することによって実現されます。 これを行うために、UAS はストリームと呼ばれるバルク転送用の新しい USB 3.0 機能を利用します。

既存の大容量ストレージ ドライバーである Usbstor.sys は、BOT プロトコルを使用します。 SuperSpeed USB デバイスを含め、デバイスのすべての速度で動作します。

Windows 8 の場合、Microsoft には、UAS プロトコルを使用する新しい大容量ストレージ クラス ドライバー Uaspstor.sys が含まれています。 ストリームは USB 3.0 の新機能であるため、Uaspstor.sys はハードウェアがストリームをサポートしている場合 (SuperSpeed USB デバイスが xHCI ホスト コントローラーに接続されている場合) にのみストリームを使用できます。 このドライバーにはソフトウェア ストリームのサポートも含まれているため、ホストの種類に関係なく、高速で動作するデバイスを読み込むこともできます。

大容量記憶装置デバイスを Windows 8 に接続し、そのデバイスが UAS をサポートしている場合、Windows は Uaspstor.sys を読み込みます。 場合によっては、特定の xHCI ホスト コントローラー上のハードウェア ストリームに関する既知の問題、またはデバイスの UAS プロトコル実装に関する既知の問題が存在する可能性があります。 このような場合、Windows は BOT プロトコルに戻り、代わりに Usbstor.sys ドライバーを読み込みます。

Uaspstor.sys は Windows 8 の新機能です。 以前のバージョンの Windows には存在しません。

マイクロソフトはどの USB DWG クラスをサポートしていますか?

Windows は、USB デバイス ワーキング グループ (DWG) が定義したいくつかの USB クラスをサポートしています。 USB クラスの仕様とクラスコードの現在のリストについては、https://www.usb.org/documents の USB DWG の Web サイトにアクセスしてください。

この表では、Windows でサポートされる USB DWG クラスを示し、各クラスをサポートする Windows のバージョンも示します。

クラスの指定 bDeviceClass Code ドライバー名 Windows 対応
Bluetooth クラス 0xE0 Bthusb.sys Windows XP 以降
チップ/スマート カード インターフェイス デバイス (CCID) 0x0B Usbccid.sys

Windows Server 2008 以降

Windows Vista 以降にのみ適用される

Windows Server 2003

Windows XP

Windows 2000

Hub クラス 0x09 Usbhub.sys

Windows Server 2003 以降

Windows XP 以降

Windows 2000 以降

ヒューマン インターフェイス デバイス (HID) 0x03 Hidusb.sys

Windows Server 2003 以降

Windows XP 以降

Windows 2000 以降

マス ストレージ クラス (MSC) 0x08 Usbstor.sys

Windows Server 2003 以降

Windows XP 以降

Windows 2000 以降

USB Attached SCSI (UAS) 0x08 Uaspstor.sys

Windows Server 2012

Windows 8

印刷クラス 0x07 Usbprint.sys

Windows Server 2003 以降

Windows XP 以降

Windows 2000 以降

スキャン/イメージング (PTP) 0x06

WpdUsb.sys

Usbscan.sys

Windows Server 2003 以降

Windows XP 以降

Windows 2000 以降

メディア転送 (MTP) 0x06 WpdUsb.sys

Windows Server 2003 以降

Windows XP 以降

USB Audio クラス 0x01 Usbaudio.sys

Windows Server 2003 以降

Windows XP 以降

Windows 2000 以降

モデム クラス (CDC) 0x02 Usbser.sys

Windows Server 2003 以降

Windows XP 以降

Windows 2000 以降

ビデオ クラス (UVC) 0x0E Usbvideo.sys

Windows Vista 以降にのみ適用される

Windows XP

*このドライバーはオペレーティング システムよりも後にリリースされた可能性があるため、このドライバーをロードするには特別な手順が必要です。 Windows クラス ドライバーでは、DWG クラスの仕様で説明されているすべての機能がサポートされていない場合があります。 この場合、ドライバーはクラス一致に基づいてロードされません。 クラス仕様内に実装された機能の詳細については、WDK ドキュメントを参照してください。

カスタム USB デバイスには、どのデバイス セットアップ クラスを使用する必要がありますか?

マイクロソフトは、ほとんどのデバイス タイプに対してシステム定義のセットアップ クラスを提供しています。 システム定義のセットアップ クラス GUID は Devguid.h で定義されます。 追加情報については、WDK を参照してください。 Windows クラス GUID の一覧については、次のトピックを参照してください。

独立系ハードウェア ベンダーは、バスの種類ではなく、USB デバイスの種類に関連付けられたセットアップ クラスを使用する必要があります。 マイクロソフトが既存のクラス GUID を提供していないデバイス タイプを開発している場合は、新しいデバイス セットアップ クラスを定義できます。

Windows 8 では、USBDevice (ClassGuid = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}) という名前の新しいセットアップ クラスが定義されています。 デバイスの種類を開発している場合は、セットアップ クラスである USB の代わりに、デバイスを USBDevice に関連付けます。 USBDevice クラスは、Windows Vista 以降のバージョンのオペレーティング システムで動作します。

セットアップ クラス USB (ClassGuid = {36fc9e60-c465-11cf-8056-444553540000}) は USB ホスト コントローラーと USB ハブにのみ予約されており、他のデバイス カテゴリには使用しないでください。 このセットアップ クラスを誤って使用すると、デバイス ドライバーが Windows ロゴ テストに失敗する可能性があります。

一部の USB デバイスを接続しても CPU が C3 に入らないのはなぜですか?

USB デバイスが接続されると、USB ホスト コントローラーはフレーム スケジューラをポーリングします。これは、ダイレクト メモリ アクセス (DMA) バス マスター操作です。 バス マスター トラフィック、割り込み、またはその他のいくつかのシステム アクティビティなどの「ブレーク イベント」により、CPU が C3 から移動されます。これは、定義上、CPU が C3 にある間は CPU のキャッシュをスヌープできないためです。

この問題を回避するには、次の 2 つの方法があります。

  • ハードウェアの削除。

    場合によっては、ハードウェアをユニバーサル シリアル バスから電子的に切断できます。 たとえば、ストレージ メディアが USB リーダーから取り外されると、USB リーダーは電子的な切断をエミュレートし、メディアが再度挿入されると再接続できます。 この場合、ホスト コントローラー上に USB デバイスがないため、C3 遷移が発生する可能性があります。

  • セレクティブ サスペンド。

    Windows XP 以降のオペレーティング システムで利用できる唯一の代替手段は、USB セレクティブ サスペンドをサポートすることです。 この機能を使用すると、システム自体が完全に動作可能な電源状態 (S0) のままであっても、デバイスがアイドル状態になったときにドライバーが制御する USB デバイスを一時停止できます。 セレクティブ サスペンドは、すべての USB 関数ドライバーがサポートする場合は特に強力です。 1 つのドライバーでもサポートされていない場合、CPU は C3 を入力できません。 セレクティブ サスペンドの詳細については、WDK を参照してください。

選択的一時停止をサポートする USB クラス ドライバーはどれですか?

セレクティブ サスペンドをサポートする Windows 8 の USB クラス ドライバーの一覧を次に示します。

  • Bluetooth

    このドライバーは、Windows XP Service Pack 2 以降のバージョンの Windows を実行しているコンピューター上のデバイスをセレクティブ サスペンドできます。 ドライバーでは、構成記述子でセルフパワードおよびリモート ウェイク ビットを設定する Bluetooth 無線が必要です。 アクティブな Bluetooth 接続が存在しない場合、ドライバーは Bluetooth 無線をセレクティブ サスペンド (D2) します。

  • USB HID

    このドライバーは、HID デバイスをセレクティブ サスペンドできます。 すべてのデバイス状態の変化でリモート ウェイク 信号をトリガーするのは、ユーザーの責任です。 HID スタックでセレクティブ サスペンドを有効にするには、デバイスの特定の VID+PID に対して SelectiveSuspendEnabled レジストリ値を有効にする必要があります。 例については、Input.inf を参照してください。

    Windows 8 のコネクト スタンバイをサポートするシステムでは、システムがコネクト スタンバイのときに、このドライバーはセレクティブ サスペンド (D2) に入ります。 このドライバーはシステムをスリープ解除して画面をオンにすることができます。

  • USB ハブ

    このドライバーは、デバイスが接続されていない場合、またはそのハブに接続されているすべてのデバイスを選択的に一時停止できる場合に、ルート ハブまたは外部ハブを選択的に一時停止できます。

  • USB モデム

    このドライバーは、アクティブなモデム接続が存在しない場合にデバイスを選択的に一時停止できます。

  • USB ストレージ (BOT)

    このドライバーは、Windows 8 コネクト スタンバイをサポートするシステムがコネクト スタンバイになるときに、そのシステム上のストレージ デバイスを選択的に一時停止 (D3) できます。 HID と同様に、すべての Windows 8 システムでセレクティブ サスペンドを有効にするレジストリ オーバーライドがあります。

  • USB ストレージ (UAS)

    このドライバーは、ディスク タイムアウト期間アイドル状態のストレージ デバイスを選択的に一時停止 (D3) できます。

  • USB Video

    このドライバーは、Windows Vista 以降のオペレーティング システムで Web カメラを選択的に一時停止 (D3) できます。

  • USB オーディオ

    このドライバーは、Windows 7 以降のオペレーティング システムで、コンピューターのバッテリ電源がオンになっているときに、USB オーディオ デバイスを選択的に中断 (D3) できます。

  • 複合 USB

    このドライバーは、すべての子がサスペンド状態にある場合に、複合デバイスを選択的に一時停止 (D3) できます。 D3-Cold をサポートするシステムでは、すべての子が D3-Cold を選択する必要があります。

  • USB スマート カード

    このドライバーは、Windows 7 以降のオペレーティング システムでは、既定でスマート カード インターフェイス デバイスを選択的に一時停止 (D2) できます。

  • 汎用 USB 周辺機器 (WinUSB)

    このドライバーは、Windows Vista 以降のオペレーティング システムで既定でデバイスを選択的に一時停止 (D3) できます。

  • WWAN: 3G または WiMax Dongles

    このドライバーは、デバイスを選択的に中断できます。 アクティブなサブスクリプションがある場合、デバイスは D2 に入り、アクティブなサブスクリプションがない場合、デバイスは D3 に入ります。

USB デバイスが S3 から Windows を起動できないのはなぜですか?

USB デバイスは、次のようないくつかの理由で、S3 から Windows を起動できません。

  1. BIOS が正しくない。

    最新の BIOS がコンピュータにインストールされていることを確認します。 コンピューターの最新の BIOS リビジョンを入手するには、OEM または ODM の Web サイトにアクセスしてください。

  2. BIOS のスリープ解除が有効になっていない。

    一部の BIOS では、S3 と S4 からのウェイクを無効にすることができます。 S3 から復帰するために BIOS が有効になっていることを確認します。

  3. USBBIOSx レジストリ キーが設定されていません。

    Windows XP のクリーンインストールには USBBIOSx レジストリ キーがありません。 OEM または ODM が BIOS が S3 から復帰できることを検証した場合は、このレジストリ キーを 0x00 に設定し、コンピューターを再起動します。

  4. ホスト コントローラーに S3 または S4 の電源がない。

    多くの場合、PC の電力状態が低下すると、PC はアドイン カードへの電力を遮断します。 アドイン カードに電力が供給されていない場合、スリープ解除イベントを検出できず、PC をスリープ解除できません。

詳細については、Windows XP 以降のバージョンの Windows のヘルプとサポート センターにある USB トラブルシューティング ツールを参照してください。

拡張 (USB 2.0) ホスト コントローラーのドライバーをインストールする必要がありますか?

次のバージョンの Windows では、USB 2.0 拡張ホスト コントローラーがサポートされています。

  • Windows Vista 以降にのみ適用される
  • Windows Server 2003 以降
  • Windows XP Service Pack 1
  • Windows 2000 Service Pack 4

注: Windows 2000 および Windows XP は USB 2.0 ハードウェアが利用可能になる前にリリースされたため、これらのオペレーティング システム用のドライバはサービス パックでリリースされました。 ドライバーをインストールするには:

  1. 最初の質問への回答に記載されている手順に従って、コンピューターに USB 2.0 ポートがあること、および拡張ホスト コントローラ用のドライバをインストールする必要があることを確認します。

  2. デバイス マネージャー ウィンドウで、最初の質問で説明したように [その他のデバイス] セクションを展開し、[ユニバーサル シリアル バス (USB) コントローラー] をダブルクリックします。

  3. [プロパティ] ダイアログ ボックスの [全般] タブで、[ドライバーの再インストール] を選択します。

    reinstall driver

  4. 新しいハードウェアの追加ウィザードで、[ソフトウェアを自動的にインストールする (推奨)]、[次へ] の順に選択します。 ウィザードの最後のページに到達するまで、ウィザードを続行し、すべての既定のオプションを受け入れて、[完了] を選択します。 インストールを完了するために、コンピューターの再起動が必要な場合があります。

注: コンピューターに最新の更新プログラムがインストールされていることを確認するには、定期的に Windows Update にアクセスしてください。

「Hi-Speed USB デバイスが非 Hi-Speed USB ポートに接続されています」という通知を無効にすることはできますか?

Windows XP 以降のバージョンの Windows では、Hi-Speed USB デバイスが高速をサポートしていない USB ポートに接続されると、ポップアップ通知が作成されます。 デバイスから最速のパフォーマンスを得るには、ユーザーは通知を選択し、画面上の指示に従う必要があります。

通知を無効にするには、次の手順に従います。

  1. この FAQ の最初の質問で説明されているように、デバイス マネージャーを開始します。
  2. [デバイス マネージャー] ウィンドウで、[ユニバーサル シリアル バス コントローラー] ノードを展開します。 タイトルに「Universal」または「Open」という単語が含まれるホスト コントローラーを探します。 見つけた場合は、ダブルクリックします。
  3. [プロパティ] ダイアログ ボックスの [詳細設定] タブで、[USB エラーについて通知しない] を選択します。

注: 前述の手順では、「Hi-Speed USB デバイスが非 Hi-Speed USB ポートに接続されている」だけでなく、すべての USB 通知が無効になります。

私の USB 2.0 ハブはシングル TT ですか? それともマルチ TT ですか?

USB 2.0 ハブは、ハブ上のすべての下流側ポートに対して 1 つのトランザクション トランスレータ (TT) を持つことも (シングル TT)、ハブ上の各下流側ポートに対して 1 つの TT を持つこともできます (マルチ TT)。

USB デバイス記述子の bDeviceProtocol フィールドと USB インターフェイス記述子の bInterfaceProtocol フィールドの値は、ハブがシングル TT かマルチ TT かを示します。

  • シングル TT。 bDeviceProtocol == 0x01
  • マルチ TT。 bDeviceProtocol == 0x02

Usbhub.sys では、この設定を使用して、マルチ TT モードまたはシングル TT モードを有効にします。 Windows XP 以降では、Usbhub.sys は常にマルチ TT ハブでマルチ TT モードを有効にします。 TT レイアウトの詳細については、USB 2.0 仕様のセクション 11.14.1.3 と 11.23.1 を参照してください。

USB シリアル番号で有効な文字またはバイトは何ですか?

USB デバイス記述子の iSerialNumber フィールドは、デバイスにシリアル番号があるかどうか、およびその番号が保存されている場所を次のように示します。

  • iSerialNumber == 0x00: USB デバイスにシリアル番号がありません。
  • iSerialNumber != 0x00: USB デバイスにシリアル番号があります。 iSerialNumber に割り当てられる値は、シリアル番号の文字列インデックスです。

デバイスにシリアル番号がある場合、シリアル番号は同じデバイスの各インスタンスを一意に識別する必要があります。

たとえば、2 つのデバイス記述子の idVendoridProduct、および bcdDevice フィールドの値が同じである場合、一方のデバイスを他方のデバイスと区別するために、iSerialNumber フィールドは異なる必要があります。

プラグ アンド プレイ USB シリアル番号のすべてのバイトが有効である必要があります。 1 バイトでも無効な場合、Windows はシリアル番号を破棄し、デバイスをシリアル番号がないものとして扱います。 次のバイト値は、USB シリアル番号では無効です。

  • 0x2C。
  • 0x20 未満の値。
  • 0x7F より大きい値。

iSerialNumber 値の詳細については、USB 2.0 仕様のセクション 9.6.1 を参照してください。

Windows のローカライズされたビルドの文字列要求ではどの LANGID が使用されますか?

USB デバイスは、USB デバイス記述子の iSerialNumber フィールドをシリアル番号の文字列インデックスに設定することによって、シリアル番号の存在を示します。 シリアル番号を取得するために、Windows は言語識別子 (LANGID) を 0x0409 (米国英語) に設定した文字列要求を発行します。 Windows のバージョンが他の言語にローカライズされている場合でも、Windows は常にこの LANGID を使用して USB シリアル番号を取得します。

デバイスのシリアル番号を抽出するにはどの LANGID が使用されますか?

USB デバイスは、USB デバイス記述子の iSerialNumber フィールドをシリアル番号の文字列インデックスに設定することによって、シリアル番号の存在を示します。 シリアル番号を取得するために、Windows は言語識別子 (LANGID) を 0x0409 (米国英語) に設定した文字列要求を発行します。 Windows のバージョンが他の言語にローカライズされている場合でも、Windows は常にこの LANGID を使用して USB シリアル番号を取得します。

複合デバイス上の複数のインターフェイスに数値を割り当てる方法

Windows は、最初の構成で複数のインターフェイスを持つ USB デバイスを複合デバイスとして扱います。

Windows XP Service Pack 1 以前のバージョンの Windows の場合:

  • インターフェイス番号は 0 から始まる必要があります。
  • インターフェイス番号は連続して増加する必要があります。

Windows XP Service Pack 2 以降のバージョンの Windows では、インターフェイス番号は連続するものではなく、増加することのみが必要です。

インターフェイスの代替設定は、Windows のすべてのバージョンで次のように割り当てる必要があります。

  • インターフェイスの既定値は常に代替設定の 0 です。
  • 追加の代替設定番号は連続して増加する必要があります。

代替設定の詳細については、USB 2.0 仕様のセクション 9.6.5 を参照してください。

Usbccgp.sys によって課される主な制限は何ですか?

Usbccgp.sys では、次の複合デバイスがサポートされています。

  • Windows Me
  • Windows XP
  • Windows Server 2003
  • Windows Vista
  • Windows Server 2008

これらのバージョンおよびそれ以降のバージョンの Windows では、複合デバイスの親ドライバーとして Usbhub.sys を読み込むことができますが、ハードウェア互換性エラーが発生する可能性があるため、マイクロソフトでは推奨しません。 代わりに Usbccgp.sys を使用してください。

複合デバイスに適切なドライバーを確実にロードするには、次のように INF ファイルで Include ディレクティブと Needs ディレクティブを使用します。

Include = USB.INF
Needs = Composite.Dev

Usbccgp.sys によってハードウェア デバイスとドライバーに課せられる主な制限は次のとおりです。

  • Usbccgp では、既定の構成である構成 0 のみがサポートされます。

  • Usbccgp は、Windows XP および Windows Server 2003 では選択的な一時停止をサポートしていません。 この機能は、Windows Vista 以降のバージョンの Windows でのみサポートされます。 Usbccgp では、Windows XP SP1 以降のバージョンの Windows XP では選択的一時停止がサポートされますが、機能は制限されています。 これらのバージョンの Windows では、複合デバイスは、デバイスの各子機能に保留中のアイドル IRP がある場合にのみセレクティブ サスペンドになります。 Usbccgp は、Windows XP RTM でのセレクティブ サスペンドをサポートしていません

  • Usbccgp では、Windows XP SP2、Windows Server 2003 SP1、およびそれ以降のバージョンの Windows でのみ、インターフェイス関連付け記述子 (IAD) がサポートされます。

  • Usbccgp は、Windows XP SP2、Windows Server 2003 SP1、およびそれ以降のバージョンの Windows でのみ、不連続のインターフェイス番号をサポートします。

USB コア バイナリ操作方法デバッグ トレースを有効にしますか?

ドライバーのパブリック PDB ファイルに WPP トレース メッセージを含める方法と表示する方法に関するブログ投稿を参照してください。

USB デバイスと ETW イベントの詳細については、「ETW イベントを使用した USB デバイスの問題のデバッグ」を参照してください。

Windows はインターフェイス関連付け記述子をサポートしていますか?

はい。 USB 2.0 Interface Association Descriptor (IAD) Engineering Change Notification (ECN) では、関数内のインターフェイスのグループ化とその代替設定を記述するための新しい標準メソッドが導入されました。 IAD を使用すると、2 つ以上の連続するインターフェイスを識別し、1 つの機能内の設定を切り替えることができます。

マイクロソフトは現在、IHV と協力して IAD をサポートするデバイスの開発に取り組んでいます。 次のオペレーティング システムは IAD をサポートしています。

  • Windows XP Service Pack 2 以降
  • Windows Server 2003 Service Pack 1 以降
  • Windows Vista

USB スタックは、URL 内のチェーンされた MDL を処理しますか?

この機能は、Windows に含まれている USB 3.0 ドライバー スタックでサポートされています。

ドライバーは、IRP に複数の URB を持つことができますか。

いいえ。 この機能は、Windows に付属の USB スタックではサポートされていません。

Windows は USB 複合ハブをサポートしていますか?

複合 USB デバイス (多機能 USB デバイスとも呼ばれます) は複数の機能を公開し、それぞれを独立したデバイスとして扱うことができます。 システムは、USB 汎用親ドライバー、Usbccgp.sys を読み込み、デバイスの機能の親ドライバーとして機能します。 USB 汎用親ドライバーは、複合デバイスの機能を別個の USB デバイスであるかのように列挙し、PDO を作成して機能ごとにデバイス スタックを構築します。

複合 USB デバイスは、ハブとして機能する機能を公開できません。 Windows はそのようなハブを適切に列挙しないため、デバイスをインストールしようとするとシステム クラッシュが発生する可能性があります。