none
USBドライバの互換性 RRS feed

  • 質問

  • USBドライバを作成する事になりました。
    デバイスドライバの開発は全く初めてで、とりあえず最新のWinDDKを入れました。
    WinDDK2003時に作成されたUSBドライバのソースがあるので、それを現在の環境
    でビルドしようとしても多くのエラーが出て通りません。
    しかもDDKのヘッダファイル内(usbdlib.h)でのエラーなどもあります。

    WinDDK2003環境だと通るのですが、Vista用ビルド環境などがないので、現在の
    WinDDK環境でビルドできないといけないのですが、互換性については現在のWDK
    はWinDDK2003の上位互換は保障されていないのでしょうか。
    • 編集済み shimpo 2009年10月30日 3:53
    • 移動 Mike Wang (MSCS) 2012年10月2日 12:25 (移動元:Windows デバイスドライバー開発)
    2009年10月29日 0:55

回答

  • ご質問の意味がわかり難いのですが、過去のソースコードがビルドできるという意味での互換性の保証という事でしたらば、毎回新しいWDK(従来のDDK)が出る度に、そのような保証はありません。

    Windows 2000~Windows Server 2003の頃は、たまたま多くのソースコードが後のバージョンのDDKでビルド出来る場合が多かったという事です。

    Windows Vista用にWDK 6000が出た時に、インクルードファイルのリファクタリングや、ライブラリの見直しがされたので、このタイミングで、従来の結構な量のソースコードは見直し(書き直し)が必要になりました。

    • 回答としてマーク shimpo 2009年10月29日 7:00
    2009年10月29日 6:57
    モデレータ
  • > そうなのですか、だとすると過去の資産をそのまま活かすというのはデバイスドライバの場合、無理があるのですね。

    「そのまま」の度合いにもよりますが、DDI(デバイスドライバ・インタフェイス)や開発キットは常に進化しているので、
    何かしらの元ソースの修正が必要な場合があるわけです。ご指摘のように、それでは互換性の保証はどうなっているのか
    という話になるのですが、(多くの場合)DDI(デバイスドライバ・インタフェイス)には、ドライバの各サブシステム毎に、
    バージョン番号があるので、その中での互換性が保証されてるという仕組みです。

    例えばWindows 98から利用できるようになったWDMのUSBは、WDMの範疇に入るので、互換性は
    WDMのバージョン番号に依存します。同様に、NDISやWDFなどのDDIがバージョン番号で互換性が管理されています。

    多くの場合、このDDIが更新されて、新バージョンのDDIが正式リリースされる時が、新しいDDK/WDKが配布されるときです。

    > WDK7600にもusbsampというのが付いていましたが、これは汎用的に作られている物なのでしょうか。

    usbsampは、従来のDDKのBulkUsb/IsoUsbのWDF/KMDF版です。
    従来のBulkUsb/IsoUsbは、WDMのDDIで記述されていましたが、WDF/KMDFで書き直されました。
    DDIが違うので、ソースコードの互換性は全くありません。

    どの目的に対して汎用的かというのがわかりませんが、ベンダ固有プロトコルのドライバのベースとして利用可能と
    いうことであれば、osrusbfx2も同じ役目を持ちます。これは実際のボードですぐ動作する、より実用的なサンプルです。
    これにはWDF/KMDF版のほかに、ユーザモードで動作するWDF/UMDF版のサンプル・ソースコードが含まれます。
    スケルトン的な機能を提供するusbsampとは、アプローチが異なります。
    ほかにもUSB-HIDを使う前提ならば、hid\hidusbfx2があります。

    Windows 7用WDK 7600では、新たにWDF(KMDF/UMDF)のサンプルが拡充されましたが、
    代わりに従来のWDMのサンプルが、バッサリと削除されました。とはいえ、WDMのドライバもビルドできますので、
    何らかの事情でWDMでドライバを書きたく、そのサンプルを求める場合には、1世代前の
    Windows Server 2008 SP1用WDK(6001.18002)の中のWDMサンプルを参照するという手があります。

    USBのベンダ固有ドライバを開発する場合、Windows 7用WDK 7600では、互いに互換性が無い、
    3種類のDDIのどれを使うかの選択する必要があります。新規にドライバを開発されるとの事ですが、
    従来のWDMを使うのか、WDF/KMDFを使うのか、WDF/UMDFを使うのかを、まずは見極める必要があります。

    Server 2003用DDKで作成されたUSBドライバのソース・コードを多少でも流用したいのでしたらば、
    WDMを使うしかありませんが、そのサンプルはWindows 7用WDK 7600には含まれません。

    USBデバイスが従来のものと全く互換性が無く、新規にドライバを開発されるのでしたらば、
    Windows 7用WDK 7600にサンプルが含まれる、WDF/KMDFか、WDF/UMDFの採用をお勧めします。
    ただしその場合は、従来のコードの再利用は、ほぼ100%出来ないと思います。
    • 回答としてマーク shimpo 2009年10月30日 7:42
    2009年10月30日 6:26
    モデレータ

すべての返信

  • ご質問の意味がわかり難いのですが、過去のソースコードがビルドできるという意味での互換性の保証という事でしたらば、毎回新しいWDK(従来のDDK)が出る度に、そのような保証はありません。

    Windows 2000~Windows Server 2003の頃は、たまたま多くのソースコードが後のバージョンのDDKでビルド出来る場合が多かったという事です。

    Windows Vista用にWDK 6000が出た時に、インクルードファイルのリファクタリングや、ライブラリの見直しがされたので、このタイミングで、従来の結構な量のソースコードは見直し(書き直し)が必要になりました。

    • 回答としてマーク shimpo 2009年10月29日 7:00
    2009年10月29日 6:57
    モデレータ
  • 回答ありがとうございます。
    そうなのですか、だとすると過去の資産をそのまま活かすというのはデバイスドライバの場合、無理があるのですね。
    とはいえ、全く初めてなので知識がなくどうしたものか・・というのが現状です。
    WDK7600にもusbsampというのが付いていましたが、これは汎用的に作られている物なのでしょうか。
    汎用的ならこれを改変して作ればよいとは思いますが、まずはどこをどう直せば・・ですね。
    2009年10月29日 7:03
  • > そうなのですか、だとすると過去の資産をそのまま活かすというのはデバイスドライバの場合、無理があるのですね。

    「そのまま」の度合いにもよりますが、DDI(デバイスドライバ・インタフェイス)や開発キットは常に進化しているので、
    何かしらの元ソースの修正が必要な場合があるわけです。ご指摘のように、それでは互換性の保証はどうなっているのか
    という話になるのですが、(多くの場合)DDI(デバイスドライバ・インタフェイス)には、ドライバの各サブシステム毎に、
    バージョン番号があるので、その中での互換性が保証されてるという仕組みです。

    例えばWindows 98から利用できるようになったWDMのUSBは、WDMの範疇に入るので、互換性は
    WDMのバージョン番号に依存します。同様に、NDISやWDFなどのDDIがバージョン番号で互換性が管理されています。

    多くの場合、このDDIが更新されて、新バージョンのDDIが正式リリースされる時が、新しいDDK/WDKが配布されるときです。

    > WDK7600にもusbsampというのが付いていましたが、これは汎用的に作られている物なのでしょうか。

    usbsampは、従来のDDKのBulkUsb/IsoUsbのWDF/KMDF版です。
    従来のBulkUsb/IsoUsbは、WDMのDDIで記述されていましたが、WDF/KMDFで書き直されました。
    DDIが違うので、ソースコードの互換性は全くありません。

    どの目的に対して汎用的かというのがわかりませんが、ベンダ固有プロトコルのドライバのベースとして利用可能と
    いうことであれば、osrusbfx2も同じ役目を持ちます。これは実際のボードですぐ動作する、より実用的なサンプルです。
    これにはWDF/KMDF版のほかに、ユーザモードで動作するWDF/UMDF版のサンプル・ソースコードが含まれます。
    スケルトン的な機能を提供するusbsampとは、アプローチが異なります。
    ほかにもUSB-HIDを使う前提ならば、hid\hidusbfx2があります。

    Windows 7用WDK 7600では、新たにWDF(KMDF/UMDF)のサンプルが拡充されましたが、
    代わりに従来のWDMのサンプルが、バッサリと削除されました。とはいえ、WDMのドライバもビルドできますので、
    何らかの事情でWDMでドライバを書きたく、そのサンプルを求める場合には、1世代前の
    Windows Server 2008 SP1用WDK(6001.18002)の中のWDMサンプルを参照するという手があります。

    USBのベンダ固有ドライバを開発する場合、Windows 7用WDK 7600では、互いに互換性が無い、
    3種類のDDIのどれを使うかの選択する必要があります。新規にドライバを開発されるとの事ですが、
    従来のWDMを使うのか、WDF/KMDFを使うのか、WDF/UMDFを使うのかを、まずは見極める必要があります。

    Server 2003用DDKで作成されたUSBドライバのソース・コードを多少でも流用したいのでしたらば、
    WDMを使うしかありませんが、そのサンプルはWindows 7用WDK 7600には含まれません。

    USBデバイスが従来のものと全く互換性が無く、新規にドライバを開発されるのでしたらば、
    Windows 7用WDK 7600にサンプルが含まれる、WDF/KMDFか、WDF/UMDFの採用をお勧めします。
    ただしその場合は、従来のコードの再利用は、ほぼ100%出来ないと思います。
    • 回答としてマーク shimpo 2009年10月30日 7:42
    2009年10月30日 6:26
    モデレータ
  • あれからいろいろ調べてWinDDK2003上で開発した以前のドライバソースが
    ちょっとした変更でWDK7600でビルド出来て動作も確認できました。
    同様にVista用、7用とビルドしました。

    そこで質問ですが、DLLは大丈夫だと思いますが、INFファイルはXPであれ
    Vistaであれ7であれ共通して使える物なのでしょうか。
    こちらにVistaマシンや7マシンが無いので試す事が出来ません。
    書籍などを読んでいる分にはINFファイルについては記載のある物が殆ど
    なく情報が乏しい状態です。
    2009年10月30日 7:46
  • Windows Vista 以降は、ドライバ・インストールの仕組みが変わり、INFファイルのチェックが厳しくなりました。
    例えば、アーキテクチャ種類の記述が無いINFファイルは認められなくなりました。
    Windows Vista以降では、ソースコードと同様に、いくつかの古いINFファイルは書き換えが必要です。
    WDKのtools\Chkinfがヒントをくれると思います。
    詳細な情報はWDKのHelpや、英語版のMSDN LibraryのWDKセクションのDevice and Driver Installation のツリーにあります。
    2009年10月30日 18:52
    モデレータ