winusbのアップデートについて
投稿者: maki 投稿日時: 水, 2010/04/28 - 18:08
makiと申します。
ドライバの世界に足を踏み入れたばかりでまだまだ右往左往しております。。
さて、私はあるデバイスを開発しておりまして、
そのデバイスはユーザPCとUSBで繋いで使用するタイプのものです。
その際、ユーザPCにインストールするドライバとしてwinusbを使用しています。
そこで質問なのですが、「winusbのアップデートはデバイス提供側が行う必要があるのか」というのがわからなくて困っています。
というのも、winusbは最近のOSでは標準で入っているようで、それならばそのアップデートも
Windows Updateで行われているのではないか?と思い、上記のような疑問が湧いた次第です。
もしWindows Updateではアップデートされないのであれば、
DDKのバージョンによって、WinUSBCoInstallerX.dllや、WdfCoInstaller0100X.dllなど
コインストーラのバージョンが上がるごとにアップデートインストーラをユーザに提供する
必要があるということなのでしょうか。
また、ついでにわからないのが、コインストーラからwinusb.sysなどのファイルができると
どこかで見たのですが、OS標準でwinusbが入っているのであれば、コインストーラから生成された
ファイルで上書きされるということなのでしょうか?
そもそもOS標準で入っているのであれば、インストール時にコインストーラを使わず、
infファイルだけでインストール(というかデバイスとの紐付け)を行うことはできないのでしょうか?
質問ばかりで大変申し訳ありません。
しかも見当はずれの質問が多々あると思うのですが、どなたかご教授願えればと思います。
よろしくお願いいたします。

こんにちは、バッキ
こんにちは、バッキーです。
(4月に会社を辞めちゃったので、しばらくここを覗いていませんでした)
さて、MSのフォーラム(http://social.msdn.microsoft.com/Forums/ja-JP/windowsdevicedriverja/thread/1ec88751-fa21-4f19-b9e7-7d5e907d5a39)に同様の質問があがっていて「WinUSBは Windows Updateの対象になっている」との見解が示されていますが、僕は「Windows Updateの対象になっていない」と思います。
というのも、XP SP3上でWinUSBをほぼ初期から使っていますが、新しいWDKがリリースされてWinUSBが更新されても、Windows UpdateでWinUSB.dllやWinUSB.sysが更新されることがなかったからです。
まぁ、XPは特別かもしれないのでVistaにWindows Updateを適用してwinusb.dllのバージョン番号が更新されるかどうか確認してみてはどうでしょうか?
それと、VistaとWin7は最初からWinUSBが入ってますが、トラブルを未然に防ぐために開発に使用したWinUSBをCoInstallerできちんとインストールした方がいいと思います。
なお、ビルド日時とバージョン番号で管理されているので古いCoInstallerを使ったとしても古いWinUSBで上書きされることは無いはずです。
便乗してすみません
便乗してすみません。
>というのも、XP SP3上でWinUSBをほぼ初期から使っていますが、
>新しいWDKがリリースされてWinUSBが更新されても、
>Windows UpdateでWinUSB.dllやWinUSB.sysが更新されることがなかったからです。
そもそも、WDK の Update と Windows Update には関連性はないと思います。
なので、WDK がバージョンアップされたからと言って、WinUSB が Windows Update で更新されなければならない、という訳ではないと思います。
MS 標準ドライバの場合、ドライバが更新されると、その Update は Sevice Pack のタイミングになるのではないでしょうか?
私の勝手な思い込みかもしれませんが、Windows Update でドライバ単体が更新されるのは、
セキュリティ系か ハング / BSOD などの重大な問題の場合だけのような気がします。
XP はすでに Main Support Phase が終了しているので、以降の Service Pack は無いと思いますし、
WinUSB 自体に大きな Bug は存在していない(?)ので、現状では Update されていないだけと思います。
なので、仮に今後 WinUSB に重大な問題が発覚した場合、Windows Update で更新される気がします。
展示会などで忙しく
展示会などで忙しく、暫くここを見ていませんでした。いろいろな事を質問されているので、整理しながら回答します。
> そこで質問なのですが、「winusbのアップデートはデバイス提供側が行う必要があるのか」
1.WinUSBのアップデート:提供側が行うのか
はい。まず考え方を確認する必要があります。
WinUSBや後述のCoInstallerは、現時点では他のWindowsを構成するDLLとは異なり、必ず誰かが最新版にアップデートする必要がある
という性質のファイルとしては扱われていません。
WinUSBは、UMDF等のドライバから利用する場合と、WinUSB APIを呼び出すアプリケーションから利用するケースの2種類がありますが、
ここでは便宜的に同等に扱って説明します。
現状のWinUSBは、ドライバまたはWinUSBを使用するアプリケーションとともに利用されて、それらと同時にインストールされることを想定しています。従ってWinUSBを更新するタイミングとしては、ドライバまたはWinUSBを使用するアプリケーションの開発者が、新しくWinUSBを利用するドライバやアプリケーションを供給するか、従来の改訂版を供給する時以外には、基本的にはありません。
開発者は、自身のドライバやアプリケーションをテストしたバージョンのWinUSBを、ドライバやアプリケーションのインストール時に常にインストールすることだけを考えれば良い。もしも複数バージョンのWinUSBが有った時には、Windows側(たぶん後から出るWinUSB)で差分を吸収するはず。というのが、現状の考え方の様です。Windows Updateで自動更新されるという話は、現時点では聞いたことがありません。Windowsでの事前インストールについては、後述します。
2.CoInstallerの最新版の提供:バージョンが上がるごとにアップデートインストーラをユーザに提供する必要があるか
現状では、前項と全く同じ考え方です。提供するとすれば、それはドライバ開発者側の責任です。
「必ず最新版を提供する必要があるか?」に対しては、NOです。CoInstallerや、UMDFヘルパー(WUDFUpdate_0100X.dll)は、バージョン間での互換性がありませんので、常にドライバ開発者がテストしたものだけをドライバとともにインストールします。CoInstallerだけの更新というものは、ドライバがテストしていないバージョンへのフレームワークの置き換えになりますので、あり得ません。例えばWindows Vista WDK(6000)で開発したドライバは条件付きで、Windows 7にもインストールすることが可能ですが、その場合にも開発時にテストした(当時最新だった)WdfCoInstaller01005.dllとともに、インストールするしかありません。バージョンの整合は、Windows側で面倒見て貰えるという仕組みです。もし、この古いCoInstallerがWindows 7にインストールされるのが嫌であれば、WDK7.1.0環境でドライバをビルドし直して、テストし直して、もしかするとソースコードやINFを修正して、WDK7.1.0に含まれるWdfCoInstaller01009.dllとともに、インストールするしかありません。
3.WinUSBの事前インストール:上書きの心配とinfファイルだけでのインストール
説明上、順番を変えています。
ここまでが現時点での考え方で、前バージョンまでのWindowsの状況なのでした。しかし話を複雑にするのは、ご指摘のように、WinUSB.sysがWindows 7 / Server 2008R2には事前インストールされているということです。これに関しては、現時点ではなぜこうなったのかの説明はありません。コインストーラから生成されたファイルで上書きされるというのは、現状ではそのようです。コインストーラやフレームワークは互換性が一部無いので、バージョン管理されていて複数バージョンが共存できるようになっていますが、WinUSB.sysは単一のファイルです。おそらくインストール時に最適な版が自動選択されるという仕組みなのですが、しっくりしません。
またWindows 7 / Server 2008R2に限っては、事前インストールされているので、INFファイルのみでのインストールという事も可能になりました。なぜWinUSB.sysだけ事前インストールされる様になったのかという点については、現在は移行のための過渡期ではないかと推測されます。ですので「現時点では」「現状は」という表現を何回も使いました。
ここから先は私の想像ですが、いずれはWinUSBやWDFCoInstllerも含めて、Windowsへの事前インストールの保証、Windows Updateでの自動更新、INFファイルのみでのインストール可能等が、正式にアナウンスされるのではないかと思います。それには、WLKのロゴテストやWDKの内容やドキュメント類までも関わっていますので、もう少し時間がかかると思います。今はそうなってはいません。
(オマケ情報ですが、実は3年ぐらい前から私はそれらの事を要求して来ていまして、きっと対応して貰えると信じています)
みなさま、丁寧なご
みなさま、丁寧なご回答ありがとうございます。
みなさまのお話を勝手ながらまとめさせていただきますと、
・ユーザPCにWinUSBが入っていようといまいと、開発者側がテストを行ったバージョンのWinUSBをCoInstallerでインストールするべき
・WinUSBやそれに伴なうCoInstallerがバージョンアップしても、Windows Updateでは更新されない
・WinUSBがバージョンアップしようが、開発者側が新しいバージョンのWinUSBを使った開発を行わない限りユーザにアップデートさせる必要はなく、古いバージョンを使用しても特に問題はない(逆にユーザにアップデートさせるのであれば、開発者側でそのバージョンのWinUSBを使ったテストを行う必要がある)
・セキュリティ等に関する重要なアップデートがある場合に限っては、Windows Updateで更新される
ということで理解してよろしいでしょうか?
Windows Updateの重要なアップデートについてなのですが、MicrosoftのUSB関連のバグフィックスのリストを見つけまして、
http://blogs.msdn.com/usbcoreblog/archive/2009/11/13/list-of-the-latest-...
これを見るとVistaと7ではWinUSBの項目があるのですが、XPにはないように見えます。
これは、
・XPには最初から入っているわけではないので項目はないが、あとからCoInstaller等でインストールされているならば更新される
・XPにインストールされたものは対象外なので誰かが面倒を見る必要がある
のどちらなのかがわからず、困っております。
おそらく前者なのではないかと思うのですが、確信が持てていない状況です。
続けての質問となり恐縮ですが、ご存知の方がおられましたらお願いいたします。
またWinUSBに関する上記の私の理解が間違っている場合もご指摘いただけると幸いです。
困っておられる問題
困っておられる問題の解決には役立ちませんが、一点だけ確認させて下さい。
Microsoftで公開されているhotfix(KB)は、全てがWindows Updateで自動的に更新されるものではありません。
ご指摘のページのhotfixは今まで見た事がないので、いずれにしても全て手作業で対応する必要があるのではないかと思います。
また、Windows Updateで更新される重要なアップデートとは、どこにも書いてありません。
返信遅くなり、大変
返信遅くなり、大変申し訳ありません。
>Microsoftで公開されているhotfix(KB)は、全てがWindows Updateで自動的に更新されるものではありません。
確かにその通りだと思います。ご助言ありがとうございます。
また、XPにインストールされたWinUSBのHotfixですが、Microsoftのドライバ開発チームに問い合わせたところ、XP用としてのHotfixが用意されることはないとのことでした。なので当然WUでの更新もありません。
また何かありましたら質問させていただきたいと思います。
みなさまありがとうございました。