none
WinUSBとUSBSTOR RRS feed

  • 質問

  • お世話になっております。

    現在WinUSBを用いたUSBドライバ開発を学んでおります。

    一般的なUSBメモリ用にWinUSB用のinfファイルを作成し、

    USB大容量記憶装置デバイスのドライバをUSBSTORから更新しました。

    その場合、デバイスマネージャでの接続別表示が

      USB大容量記憶装置デバイス - USB Device - 汎用ボリューム だったのが、

      USB大容量記憶装置デバイス のみになってしまい、マイコンピュータにもストレージが表示されません。

    デバイスマネージャで確認すると、USB大容量記憶装置デバイスの”バス関係”が空白になっていました。

    なにか解決法はございませんか?

     

    // 作成したiniファイル

    [Version]
    Signature   = "$Windows NT$"
    Provider    = %ProviderName%

    ;;
    ;; [$$$1]
    ;; cf. MSDN: Windows Driver Kit: Device Installation
    ;;  "INF DriverVer Directive"
    ;;  (http://msdn.microsoft.com/en-us/library/ms794435.aspx)
    ;;
    DriverVer   = 07/01/2010,0.1.0.1

    ;;
    ;; [$$$2]
    ;; cf. MSDN: Windows Driver Kit: Device Installation
    ;;  "Device Setup Classes"
    ;;  (http://msdn.microsoft.com/en-us/library/ms791131.aspx)
    ;;

    Class =Volume
    ClassGuid={71a27cdd-812a-11d0-bec7-08002be2092f}


    ;;
    ;; [$$$3]
    ;; cf. MSDN: Windows Driver Kit: Device Installation
    ;;  "Catalog Files"
    ;;  (http://msdn.microsoft.com/en-us/library/aa906236.aspx)
    ;;
    ;;; CatalogFile=MyCatFile.cat


    ; ================== Class section ==================

    [ClassInstall32]
    Addreg=MyDeviceClassReg

    [MyDeviceClassReg]
    HKR,,,0,%XXXClassName%
    HKR,,Icon,,"-1"

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

    [Manufacturer]
    %ProviderName%=MyDevice_WinUSB,NTx86,NTamd64

    ;;
    ;; [$$$4]
    ;; これらの行は利用するターゲットにあわせて修正して下さい。
    ;; e.g.
    ;;  ターゲットが [idVendor == 0x1234] と [idProduct == 0x5678]
    ;;  を持つ場合は、以下の様に修正します :
    ;;      "%USB\MyDevice.DeviceDesc%=USB_Install, USB\VID_1234&PID_5678"
    ;;

    [MyDevice_WinUSB.NTx86]
    %USB\Vid_XXXX&Pid_XXXX.DeviceDesc%=USB_Install, USB\Vid_XXXX&Pid_XXXX


    [MyDevice_WinUSB.NTamd64]
    %USB\Vid_XXXX&Pid_XXXX.DeviceDesc%=USB_Install, USB\Vid_XXXX&Pid_XXXX



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

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

    ;[2]
    [USB_Install.Services]
    Include="winusb.inf"
    AddService=WinUSB,0x00000002,WinUSB_ServiceInstall

    ;[3]
    [WinUSB_ServiceInstall]
    DisplayName=%XXX.SvcDesc%
    ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
    StartType      = 3                  ; SERVICE_DEMAND_START
    ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL
    ServiceBinary=%12%\WinUSB.sys



    ;[4]
    [USB_Install.Wdf]
    KmdfService=WINUSB, WinUsb_Install

    [WinUSB_Install]
    KmdfLibraryVersion=1.9

    ;[5]
    [USB_Install.HW]
    AddReg=Dev_AddReg

    ;;
    ;; [$$$5]
    ;; この Device Interface GUID は重要です。
    ;; この GUID を SetupDiGetClassDevs() API の引数へ与え、
    ;; アプリケーションからターゲットを検索します。
    ;;
    [Dev_AddReg]
    HKR,,DeviceInterfaceGUIDs,0x10000,"{XXX}"


    ;[6]
    [USB_Install.CoInstallers]
    AddReg=CoInstallers_AddReg
    CopyFiles=CoInstallers_CopyFiles

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

    [CoInstallers_CopyFiles]
    WinUsbCoInstaller2.dll
    WdfCoInstaller01009.dll
    WUDFUpdate_01009.dll

    [DestinationDirs]
    CoInstallers_CopyFiles=11





    ; ================= Source Media Section =====================
    ;[7]
    [SourceDisksNames]
    1=%XXX.SrcDesc%,,,\x86
    2=%XXX.SrcDesc%,,,\amd64

    [SourceDisksFiles.x86]
    WinUsbCoInstaller2.dll=1
    WdfCoInstaller01009.dll=1
    WUDFUpdate_01009.dll=1

    [SourceDisksFiles.amd64]
    WinUsbCoInstaller2.dll=2
    WdfCoInstaller01009.dll=2
    WUDFUpdate_01009.dll=2

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

    [Strings]
    ProviderName="XXX"

    XXXClassName="XXX"

    ClassName="Volume"

     

    よろしくお願いいたします。

    • 移動 Mike Wang (MSCS) 2012年10月2日 12:58 (移動元:Windows デバイスドライバー開発)
    2010年7月8日 2:53

回答

  • EIGHT8888 さん、こんにちは。

    usbstor を WinUSB に置き換えることで、usbstor が行っていた LUN の Physical Device Object が生成されず、その結果デバイスマネージャー上で "USB大容量記憶装置デバイス" 配下のデバイスが表示されなくなったと思います。下記ドキュメントに、USB マスストレージデバイスのデバイス/ドライバスタックが記載されています。

    Device Object Example for a USB Mass Storage Device
    http://msdn.microsoft.com/en-us/library/ff552547(VS.85).aspx

    一方で WinUSB のスタックは、以下のドキュメントに記載されていますが、ストレージに特化したような記述は見当たりませんでした。おそらくですが usbstor の代替として WinUSB を使用することはできないと思います。

    WinUSB Architecture and Modules
    http://msdn.microsoft.com/en-us/library/ff540207(VS.85).aspx

    ちなみに各 USB クラス固有の対応となると、ドライバ側で下記スペックを満たす必要があると思います。

    Approved Class Specification Documents
    http://www.usb.org/developers/devclass_docs

    参考になりましたら幸いです。

    2010年7月21日 12:28

すべての返信

  • EIGHT8888 さん、こんにちは。

    usbstor を WinUSB に置き換えることで、usbstor が行っていた LUN の Physical Device Object が生成されず、その結果デバイスマネージャー上で "USB大容量記憶装置デバイス" 配下のデバイスが表示されなくなったと思います。下記ドキュメントに、USB マスストレージデバイスのデバイス/ドライバスタックが記載されています。

    Device Object Example for a USB Mass Storage Device
    http://msdn.microsoft.com/en-us/library/ff552547(VS.85).aspx

    一方で WinUSB のスタックは、以下のドキュメントに記載されていますが、ストレージに特化したような記述は見当たりませんでした。おそらくですが usbstor の代替として WinUSB を使用することはできないと思います。

    WinUSB Architecture and Modules
    http://msdn.microsoft.com/en-us/library/ff540207(VS.85).aspx

    ちなみに各 USB クラス固有の対応となると、ドライバ側で下記スペックを満たす必要があると思います。

    Approved Class Specification Documents
    http://www.usb.org/developers/devclass_docs

    参考になりましたら幸いです。

    2010年7月21日 12:28
  • 時間が経ってしまいましたが回答済としてマークさせて頂きました。

    デバイスのドライバは、Hardware ID によりドライバと1対1で結び付けられます。Hardware IDとは、USBデバイスの場合はPIDとVIDです。

    peiri さんの指摘の様にストレージ機能を持つUSBSTOR ドライバのサポートを抜いてしまったのですから、ストレージとして見えないのは当然の動作です。

    2012年7月7日 14:27
    モデレータ