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

特定のユニバーサル シリアル バス (USB) デバイスでは、ドライバーを実装する代わりに、 WinUSB (Winusb.sys) をインストールできます。

重要

このトピックはプログラマー向けです。 USB の問題が発生しているお客様の場合は、「windows で USB-C の問題を修正する を参照してください。

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

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

WinUSB デバイスを接続すると、システムによってデバイス情報が読み取られ、 Winusb.sys が自動的に読み込まれます。

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

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

デバイスを接続すると、Windows が自動的に Winusb.sys 読み込まれることに気付く場合があります。 それ以外の場合は、次の手順に従ってドライバーを読み込みます。

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

Universal Serial Bus デバイスデバイス クラスの一覧に表示されない場合は、カスタム 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. デバイスをシステムから切断し、同じ物理ポートに再接続します。

    Note

    物理ポートを変更する場合は、手順 1 から 4 を繰り返す必要があります。

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

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

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

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

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

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

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
PnpLockdown = 1

; ========== 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

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

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

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

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

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

    Note

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

次の INF は、WinUSB を OSR USB FX2 ボードのファンクション ドライバーとして x64 ベースのシステムにインストールします。 この例は、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
PnpLockdown = 1

; ========== 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 をインストールするために使用します。 Windows のチェック されたビルドに WinUSB をインストールするには、チェックされたバージョン ("_chk" サフィックスを付けて) を使用します。

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

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

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

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

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

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

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

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

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

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

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

    WinUSB コインストーラー (Winusbcoinstaller.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 をターゲット システムにインストールします。 KMDF ベースのクライアント ドライバー ( Winusb.sys など) では、対応するバージョンの KMDF フレームワークをシステムに正しくインストールする必要があるため、WinUSB コインストーラーのバージョンは KMDF コインストーラーと一致する必要があります。 たとえば、Winusbcoinstaller2.dllには KMDF バージョン 1.9 が必要であり、Wdfcoinstaller01009.dllインストールされます。 WdfcoinstallerXXX.dll の x86 バージョンと x64 バージョンは、WDK の WinDDK\<BuildNumber>\redist\wdf フォルダーの下に含まれています。 次の表は、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. ドライバーをインストールするには、デバイス マネージャーを開きます。 ドライバー ソフトウェアの更新 ウィザードに表示される手順に従って、手動インストールを選択します。 インストールを完了するには、ドライバー パッケージ フォルダーの場所を指定します。