開発者向けの WinUSB (Winusb.sys) のインストール

1 つのアプリケーションのみがアクセスするデバイスなど、特定のユニバーサル シリアル バス (USB) デバイスの場合は、ドライバーを実装する代わりに、デバイスのカーネル モード スタックに WinUSB (Winusb.sys) を USB デバイスのファンクション ドライバーとしてインストールできます。

重要

このトピックはプログラマーを対象としています。 USB に関する問題が発生している場合は、「一般的な USB の問題のトラブルシューティング」を参照してください

INF ファイルを使用せずに WinUSB を自動インストールする

OEM または独立系ハードウェア ベンダー (IHV) として、Winusb.sysがオペレーティング システムのWindows 8以降のバージョンに自動的にインストールされるようにデバイスを構築できます。 このようなデバイスは WinUSB デバイスと呼ばれ、インボックス Winusb.inf を参照するカスタム INF ファイルを記述する必要はありません。

WinUSB デバイスを接続すると、システムはデバイス情報を読み取り、 Winusb.sys 自動的に読み込みます。

詳細については、「WinUSB デバイス」を参照してください。

システム提供のデバイス クラスを指定して WinUSB をインストールする

デバイスを接続すると、Windows が自動的 にWinusb.sys 読み込まれることに気付く場合があります (IHV がデバイスを WinUSB デバイスとして定義している場合)。 そうなっていない場合は、次の手順に従ってドライバーを読み込みます。

  1. デバイスをホスト システムに接続します。
  2. デバイス マネージャーを開き、デバイスを見つけます。
  3. デバイスを長押し (または右クリック) し、コンテキスト メニューの [ドライバー ソフトウェアの更新...] を選びます。
  4. ウィザードで [コンピューターを参照してドライバー ソフトウェアを検索します] を選択します。
  5. [コンピューター上のデバイス ドライバーの一覧から選択します] を選択します。
  6. デバイス クラスの一覧から、 [ユニバーサル シリアル バス デバイス] を選択します。
  7. ウィザードに [WinUsb デバイス] が表示されます。 それを選択してドライバーを読み込みます。

デバイス クラスの一覧に [ユニバーサル シリアル バス デバイス] が表示されない場合は、カスタム INF を使用してドライバーをインストールする必要があります。 前の手順では、デバイスにアクセスするためのアプリ (UWP アプリまたは Windows デスクトップ アプリ) のデバイス インターフェイス GUID は追加されません。 この手順に従って、手動で GUID を追加する必要があります。

  1. 前の手順で説明したように、ドライバーを読み込みます。

  2. guidgen.exe などのツールを使用して、デバイスのデバイス インターフェイス GUID を生成します。

  3. 次のキーの下でデバイスのレジストリ キーを探します。

    <HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_vvvv&PID_pppp>

  4. Device Parameters キーの下で、DeviceInterfaceGUID という文字列レジストリ エントリ、または DeviceInterfaceGUIDs という複数行文字列エントリを追加します。 値を手順 2 で生成した GUID に設定します。

  5. デバイスをシステムから切断し、同じ物理ポートに再接続します。 : 物理ポートを変更する場合は、手順 1 から 4 を繰り返す必要があります。

WinUSB インストール用のカスタム INF を作成する

ドライバー パッケージの一部として、USB デバイスのファンクション ドライバーとして Winusb.sys をインストールする .inf ファイルを指定します。

次の .inf ファイルの例は、セクション名の USB_Install を適切な DDInstall 値に変更するなど、いくつかの変更を加えたほとんどの USB デバイスの WinUSB インストールを示しています。 必要に応じて、バージョン、製造元、モデルのセクションも変更する必要があります。 たとえば、適切な製造元の名前、署名されたカタログ ファイルの名前、正しいデバイス クラス、デバイスのベンダー ID (VID) と製品識別子 (PID) を入力します。 カタログ ファイルの作成の詳細については、「ドライバー パッケージのテスト署名用のカタログ ファイルの作成」を参照してください。

また、セットアップ クラスが "USBDevice" に設定されていることにも注意してください。 ベンダーは、USB ホスト コントローラーまたはハブではなく、別のクラスに属していないデバイスに対して "USBDevice" セットアップ クラスを使用できます。

USB 複合デバイス内のいずれかの機能の関数ドライバーとして WinUSB をインストールする場合は、その機能に関連付けられているハードウェア ID を INF で指定する必要があります。 機能のハードウェア ID は、デバイス マネージャーの devnode のプロパティから取得できます。 ハードウェア ID 文字列形式は "USB\VID_vvvv PID_pppp&" です。

次の INF では、x64 ベースのシステム上に、OSR USB FX2 ボードの関数ドライバーとして WinUSB をインストールします。

Windows 10 バージョン 1709 以降、Windows Driver Kit には InfVerif.exe が用意されています。これを使用すると、ドライバーの INF ファイルをテストして、構文の問題がないこと、および INF ファイルがユニバーサルであることを確認できます。 ユニバーサル INF を指定することをお勧めします。 詳細については、「ユニバーサル INF ファイルの使用」を参照してください。

;
;
; Installs WinUsb
;

[Version]
Signature = "$Windows NT$"
Class     = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider  = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer=09/04/2012,13.54.20.543

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition (for Windows 8 and earlier versions)===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install

[WinUsb_Install]
KmdfLibraryVersion=1.11

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

; [DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.  
; You must explicitly reference all file-list-section names in this section.

; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
REG_MULTI_SZ = 0x00010000

新しいカスタム デバイス セットアップ クラスをインストールする場合にのみ、ClassInstall32 セクションをデバイスの INF ファイルに含めます。 システム提供のデバイス セットアップ クラスかカスタム クラスかを問わず、インストール済みクラスのデバイスの INF ファイルには、ClassInstall32 セクションを含めることはできません。

デバイス固有の値と、次の一覧に記載されているいくつかの問題を除き、これらのセクションとディレクティブを使用して、任意の USB デバイスに WinUSB をインストールすることができます。 以下のリスト項目では、前の .inf ファイル内のインクルードディレクティブについて説明します。

  • USB_Install: WinUSB をインストールするために、USB_Install セクションの Include ディレクティブと Needs ディレクティブが必要です。 これらのディレクティブは変更しないでください。

  • USB_Install.Services: USB_Install.Services セクションの Include ディレクティブには、WinUSB (Winusb.inf) 用のシステム提供の .inf が含まれています。 この .inf ファイル (ターゲット システムにまだない場合) は、WinUSB 共同インストーラーによってインストールされます。 Needs ディレクティブは、デバイスのファンクション ドライバーとしてWinusb.sysをインストールするために必要な情報を含む Winusb.inf 内のセクションを指定します。 これらのディレクティブは変更しないでください。

  • USB_Install.HW: このセクションは.inf ファイルのキーです。 デバイスのデバイス インターフェイスのグローバル一意識別子 (GUID) を指定します。 AddReg ディレクティブは、指定されたインターフェイス GUID を標準レジストリ値に設定します。 Winusb.sysがデバイスのファンクション ドライバーとして読み込まれると、レジストリ値 DeviceInterfaceGUIDs キーが読み取られ、指定された GUID を使用してデバイス インターフェイスが表されます。 この例の GUID は、お使いのデバイス用に作成した GUID に置き換える必要があります。 デバイスのプロトコルが変更された場合は、新しいデバイス インターフェイス GUID を作成します。

    メモ ユーザー モード ソフトウェアでは、DeviceInterfaceGUIDs キーで指定されたデバイス インターフェイス クラスのいずれかに関連付けられている登録済みデバイス インターフェイスを列挙するために 、SetupDiGetClassDevs を呼び出す必要があります。 SetupDiGetClassDevs は、ユーザー モード ソフトウェアがデバイス インターフェイスの WinUSB ハンドルを取得するために WinUsb_Initialize ルーチンに渡す必要があるデバイスのデバイス ハンドルを返します。 これらのルーチンの詳細については、「WinUSB 関数を使用して USB デバイスにアクセスする方法」を参照してください。

次の INF では、x64 ベースのシステム上に、OSR USB FX2 ボードの関数ドライバーとして WinUSB をインストールします。 この例では、WDF 共同インストーラーを使用した INF を示します。

;
;
; Installs WinUsb
;

[Version]
Signature = "$Windows NT$"
Class     = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider  = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer=09/04/2012,13.54.20.543

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition (for Windows 8 and earlier versions) ===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

[USB_Install.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01011.dll,WdfCoInstaller","WinUsbCoInstaller2.dll"

[CoInstallers_CopyFiles]
WinUsbCoInstaller2.dll
WdfCoInstaller01011.dll

[DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.  
CoInstallers_CopyFiles=11
; ================= Source Media Section =====================

[SourceDisksNames]
1 = %DiskName%

[SourceDisksFiles]
WinUsbCoInstaller2.dll=1
WdfCoInstaller01011.dll=1


; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
DiskName="MyDisk"
REG_MULTI_SZ = 0x00010000
  • USB_Install.CoInstallers: このセクションには、参照される AddReg セクションと CopyFiles セクションが含まれており、WinUSB と KMDF の共同インストーラーをインストールしてデバイスに関連付けるデータと手順が含まれています。 ほとんどの USB デバイスでは、これらのセクションとディレクティブを変更せずに使用できます。

  • x86 ベースと x64 ベースのバージョンの Windows には、別々の共同インストーラーが用意されています。

    各共同インストーラーには、無料のバージョンと確認済みのバージョンがあります。 無料バージョンは、すべての製品版を含む Windows の無償のビルドに WinUSB をインストールするために使用します。 チェックされたバージョン ("_chk" サフィックスを付けて) を使用して、Windows のチェックされたビルドに WinUSB をインストールします。

Winusb.sys読み込まれるたびに、DeviceInterfaceGUIDs キーの下にレジストリで指定されたデバイス インターフェイス クラスを持つデバイス インターフェイスが登録されます。

HKR,,DeviceInterfaceGUIDs, 0x10000,"{D696BFEB-1734-417d-8A04-86D01071C512}"

Windows XP または Windows Server 2003 用の再頒布可能 WinUSB パッケージを使用する場合は、アンインストール パッケージで WinUSB をアンインストールしないようにしてください。 他の USB デバイスによって WinUSB が使用されている可能性があるため、そのバイナリを共有フォルダーに残しておく必要があります。

Winusb.sys をインストールするドライバー パッケージの作成方法

デバイスの関数ドライバーとして WinUSB を使用するには、ドライバー パッケージを作成します。 ドライバー パッケージには、次のファイルが含まれている必要があります。

  • WinUSB 共同インストーラー (Winusbinstaller.dll)
  • KMDF 共同インストーラー (WdfcoinstallerXXX.dll)
  • デバイスのファンクション ドライバーとして Winusb.sys をインストールする .inf ファイル。 詳細については、「 WinUSB インストール用のカスタム INF の作成」を参照してください。
  • パッケージ用の署名されたカタログ ファイル。 このファイルは、Vista 以降の x64 バージョンの Windows に WinUSB をインストールするために必要です。

WinUSB インストール パッケージ。

ドライバー パッケージの内容が次の要件を満たしていることを確認します。

  • KMDF 共同インストーラー ファイルと WinUSB 共同インストーラー ファイルは、同じバージョンの Windows Driver Kit (WDK) から取得する必要があります。
  • 共同インストーラー ファイルは最新バージョンの WDK から取得する必要があります。これにより、ドライバーで最新の Windows リリースをすべてサポートできるようになります。
  • ドライバー パッケージの内容は、Winqual リリース署名を使用してデジタル署名されている必要があります。 署名されたカタログ ファイルを作成してテストする方法の詳細については、Windows デベロッパー センター - ハードウェア サイトの「カーネルモードのコード署名のチュートリアル」を参照してください。
  1. Windows Driver Kit (WDK) をダウンロードしてインストールします。

  2. USB デバイスが接続されているコンピューターにドライバー パッケージ フォルダーを作成します。 たとえば、c:\UsbDevice です。

  3. WinUSB 共同インストーラー (WinusbcoinstallerX.dll) を WinDDK\BuildNumber>\<redist\winusb フォルダーからドライバー パッケージ フォルダーにコピーします。

    WinUSB 共同インストーラー (Winusbinstaller.dll) により、ターゲット システムに WinUSB が必要に応じてインストールされます。 WDK には、アーキテクチャ (x86 ベース、x64 ベース、Itanium ベースのシステム) に応じて、3 つのバージョンの共同インストーラーが含まれています。 これらはすべて WinusbcoinstallerX.dll という名前で、WinDDK\BuildNumber>\<redist\winusb フォルダー内の適切なサブディレクトリにあります。

  4. KMDF 共同インストーラー (WdfcoinstallerXXX.dll) を WinDDK\BuildNumber>\<redist\wdf フォルダーからドライバー パッケージ フォルダーにコピーします。

    KMDF 共同インストーラー (WdfcoinstallerXXX.dll) により、ターゲット システムに正しいバージョンの KMDF が必要に応じてインストールされます。 WinUSB 共同インストーラーのバージョンは KMDF 共同インストーラーと一致する必要があります。KMDF ベースのクライアント ドライバー ( Winusb.sysなど) では、対応するバージョンの KMDF フレームワークをシステムに適切にインストールする必要があるためです。 たとえば、Winusbcoinstaller2.dll では、Wdfcoinstaller01009.dll によってインストールされる KMDF バージョン 1.9 が必要とされます。 x86 および x64 バージョンのWdfcoinstallerXXX.dllは、WinDDK\BuildNumber>\<redist\wdf フォルダーの下にある WDK に含まれています。 次の表は、ターゲット システムに対して使用する、WinUSB 共同インストーラーおよび関連する KMDF 共同インストーラーを示しています。

    この表を使用して、WinUSB 共同インストーラーおよび関連する KMDF 共同インストーラーを確認してください。

    WinUSB 共同インストーラー KMDF ライブラリのバージョン KMDF 共同インストーラー
    Winusbcoinstaller.dll KMDF バージョン 1.5 以降が必要です Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll KMDF バージョン 1.9 以降が必要です Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll KMDF バージョン 1.11 以降が必要です WdfCoInstaller01011.dll
  5. USB デバイスのファンクション ドライバーとして Winusb.sys をインストールする .inf ファイルを記述します。

  6. パッケージ用の署名されたカタログ ファイルを作成します。 このファイルは、x64 バージョンの Windows に WinUSB をインストールするために必要です。

  7. USB デバイスをコンピューターに接続します。

  8. ドライバーをインストールするためにデバイス マネージャーを開きます。 ドライバー ソフトウェアの更新ウィザードに表示される手順に従って、手動インストールを選択します。 インストールを完了するには、ドライバー パッケージ フォルダーの場所を指定する必要があります。

WinUSB アーキテクチャとモジュール
USB クライアント ドライバー開発用のドライバー モデルの選択
WinUSB 関数を使用して USB デバイスにアクセスする方法
WinUSB 電源管理
パイプ ポリシー修正のための WinUSB 関数
WinUSB 関数
WinUSB