USB シリアル ドライバー (Usbser.sys)
重要
このトピックはプログラマー向けです。 USB に関する問題が発生している場合は、「Windows での USB-C の問題を修正する」を参照してください
コミュニケーションおよび CDC 制御デバイス用にマイクロソフトが提供する USB ドライバー (Usbser.sys) を使用します。 マイクロソフトでは、可能な限り Windows に付属のドライバーを使用することをお勧めします。
サポートされているバージョン
- Windows 11
- Windows 10
適用対象
- CDC 制御デバイスのデバイス製造元
Windows 10では、カーネル モード ドライバー フレームワークを使用してドライバーが書き換えられ、ドライバーの全体的な安定性が向上しました。
- ドライバーによるプラグ アンド プレイと電源管理が改善されました。
- USB セレクティブ サスペンドなどの電源管理機能が追加されました。
さらに、UWP アプリケーションは、アプリがこれらのデバイスと通信できるようにする Windows.Devices.SerialCommunication 名前空間によって提供される API を使用できるようになりました。
Usbser.sys のインストール
コミュニケーションおよび CDC 制御デバイス用のマイクロソフトが提供するインボックス ドライバー (Usbser.sys) を読み込みます。
Note
Windows に含まれている USB デバイス クラス ドライバーをインストールしようとしている場合は、ドライバーをダウンロードする必要はありません。 これらは自動的にインストールされます。 自動的にインストールされない場合は、デバイス製造元にお問い合わせください。 Windows に含まれる USB デバイス クラス ドライバーのリストについては、「Windows に含まれる USB デバイス クラス ドライバー」を参照してください。
Windows 10以降では、Usbser.inf が %Systemroot%\INF ディレクトリに追加され、Usbser.sys がデバイス スタックに機能デバイス オブジェクト (FDO) として読み込まれます。 デバイスが通信および CDC 制御装置クラスに属している場合、Usbser.sys は自動的に読み込まれます。 ドライバーを参照するために独自の INF を記述する必要はありません。 ドライバーは、Windows に含まれる USB デバイス クラス ドライバーと同様に、互換性のある ID の一致に基づいて読み込まれます。
USB\Class_02
USB\Class_02&SubClass_02
Usbser.sys を自動的に読み込む場合は、デバイス記述子でクラス コードを 02 に、サブクラス コードを 02 に設定します。 この方法では、システムが Usbser.inf を使用するため、デバイス用の INF ファイルを配布する必要はありません。 詳細については、「 通信デバイス 1.2のクラス定義」を参照してください。
デバイスでクラス コード 02 が指定されているが、サブクラス コード値が 02 以外の場合、Usbser.sys は自動的に読み込まれません。 プラグ アンド プレイ マネージャーがドライバーの検索を試みます。 適切なドライバーが見つからない場合は、デバイスにドライバーが読み込まれていない可能性があります。 独自のドライバーを読み込むか、別のインボックス ドライバーを参照する INF を記述する必要がある場合があります。
デバイスでクラスとサブクラスのコードが 02 に指定されており、Usbser.sys ではなく別のドライバーを読み込む場合は、デバイスのハードウェア ID とインストールするドライバーを指定する INF を作成する必要があります。 例については、サンプル ドライバーに含まれている INF ファイルを参照し、ご利用のデバイスに類似したデバイスを見つけてください。 INF セクションについては、「INF ファイルの概要」を参照してください。
Usbser.sys 用にセレクティブ サスペンドを構成する
Windows 10 以降では、Usbser.sys で USB セレクティブ サスペンドがサポートされています。 これにより、システムが S0 状態のままになっている間は、接続されている USB シリアル デバイスは、使用されていないときに低電力状態になることができます。 デバイスとのコミュニケーションが再開されると、デバイスはサスペンド状態を終了し、動作状態を再開できます。 この機能は、既定では無効になっており、このレジストリ キーの下に IdleUsbSelectiveSuspendPolicy エントリを設定することによって有効にし、構成することができます。
HKEY\LOCAL\MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<hardware id>\<instance id>\Device Parameters
Usbser.sys の電源管理機能を構成する場合は、IdleUsbSelectiveSuspendPolicy を次のように設定することができます。
「0x00000001」: アイドル状態、つまり、デバイスとの間でアクティブなデータ転送がない場合に、セレクティブ サスペンドに入ります。
「0x00000000」: デバイスへのハンドルが開いていない場合にのみ、セレクティブ サスペンドに入ります。
このエントリは、次の 2 つの方法のいずれかで追加できます。
インストール INF を参照する INF を作成し、HW.AddReg セクションにレジストリ エントリを追加します。
拡張プロパティの OS 機能記述子にレジストリ エントリを記述します。 bPropertyName フィールドを Unicode 文字列 "IdleUsbSelectiveSuspendPolicy" に、wPropertyNameLength を 62 バイトに設定するカスタム プロパティ セクションを追加します。 bPropertyData フィールドを "0x00000001" または "0x00000000" に設定します。 プロパティ値は、リトルエンディアンの 32 ビット整数として格納されます。
詳細については、「Microsoft OS 記述子」を参照してください。
USB CDC デバイス用に Windows アプリケーションを開発する
Windows 10 以降では、Windows アプリで Windows.Devices.SerialCommunication 名前空間を使用して、Usbser.sys に要求を送信することができます。 シリアル ポート、またはシリアル ポートの何らかの抽象化を介して USB CDC デバイスと通信するために使用できる、Windows ランタイム クラスが定義されます。 クラスでは、このようなシリアル デバイスを検出し、データの読み取りと書き込みを行い、フロー制御のためのシリアル固有のプロパティ (ボー レートの設定、シグナルの状態など) を制御するための機能が提供されます。