dpinstによるセットアップでWDFとWDMで挙動が違う

こんにちは。

dpinstでwdmとwdfのドライバの挙動の差異について質問があります。

自前のWDMで設計したUSBドライバにCAによる署名を行った上でdpinstすると、インストールの途中で「このドライバはロゴ認証に合格してない」という表示があります。whqlにまだ申請していないので至極当たり前のように思えるのですが、
一方で、日高さんの記事(http://www.devdrv.co.jp/download/interface/0812/)で提示しているtestInst1によるdpinstではインストール中に上述の表示はありません。TestInst1に含まれるドライバはWDFで作成されているようです。そして、日高さんのデジタル署名が行われていました。

INFの設定内容も確認しましたがTestInst1のINFについても、特筆点はないように見受けられます。

上述からすると、状況としてはWDMかWDFの差異の違いで、インストール時の警告表示の有無が異なるように思えたのですが、正しいでしょうか。

現状は、dpinstでプリインストールしたときの警告と、その後にUSBケーブルを挿したときにも同様の警告が表示されてしまうので、dpinst時は何とか消せないものかと考えています。ロゴ認証を受ければ何ら問題はないのですが。

よろしくご教授いただけましたら幸いです。

もうコメントはない

もうコメントはないだろうと思っていたんですが、
別件で調べていたらこちらの記事の更新を発見しました。
こちらこそ、ひじょうに参考になりました。
デバイスドライバ開発は始めてからやっと1年たつかどうかなのですが、
OSの神髄に触れるところで、ひじょうに大変だなと思うところもありますが、引き込まれるおもしろさもあります。

ロゴ認証については会社の管理の方で却下されてしまいましたのでいろいろ苦慮しています。

でも、このスレッドの発端の問題の原因がわかったので、だいぶすっきりしています。

Windows7の売れ行きが好調のようですし、XPはとりあえず、
現状維持の挙動で納めておきたいと思います。

どうもありがとうございました!

Windows

Windows XP時代の古い話をやっと思い出しました。言い訳になりますが、VistaのKMCS騒動にどっぷりと漬かっていたので、すっかり忘れていました。

Windows XP系とWindows Server2003系では、ドライバのCLASSによってインストール時の振る舞いが異なります。WHQLとまだ呼んでいた、当時のWindowsロゴが用意されているCLASSのドライバのインストールでは、SPC署名のインストールでも「ロゴ無し」の警告が出ます。ドライバの動作上の問題は無いのですが、インストール時の操作に手間がかかるため、各メーカがこれを嫌ってロゴを取得し始めました。また一部のメーカでは、この警告を避けるために、ドライバのインストール・クラスをWindowsロゴが用意されていないものへと変更したりもしていました。独自のCLASSをインストールして利用したり、警告が出ないUSBコントローラのクラスを使用したりです。

これの注意点が書いてある文献を探しましたので紹介します。

Authenticode を使用して、Windows Server 2003 用のドライバ パッケージにデジタル署名する
http://www.microsoft.com/japan/whdc/driver/install/authenticode.mspx

Authenticode digital signatureとはSPC署名の事です。2003年5月のWindows Server 2003以降に利用できるようになったので、Windows XPはSP2以降での対応です。以下のように書いてあります。

●Windows Server 2003 and later versions only.
If the driver package is not eligible for the Windows Logo Program, you can use an Authenticode digital signature to authenticate a driver package. However, note the following:
•An Authenticode digital signature does not indicate that the package has passed a test program.
•If the device setup class of a driver package is included in the Windows Logo Program at a future date, you will have to obtain a WHQL digital signature for the driver package.

つまり、Windows Server 2003以降の対応版では、Authenticodeデジタル署名が使えるが、次の点に注意せよということです。
- Authenticodeデジタル署名は、ドライバがテストをパスしたことは示さない。
- デバイスのセットアップのクラスが、Windowsロゴ対象のクラスであればWHQLのデジタル署名が必要である。

という事です。すっきりしましたが、Windows Vista以降とではDPInst等でのインストール動作が異なるのは困ったものです。

たまたま私も、仮想CO

たまたま私も、仮想COM PortのClass=Portsのドライバに署名をすることになり、私も同じ問題にはまりました。
全く同じ状況を確認しましたので、先人のmisonoさんの情報は非常に役に立ちます。

Windows2000では発生しませんが、Windows XP系とWindows Server2003系では発生するので仕様である可能性が高いと思います。

Windows XPでのこのおかしな動作は、プレ・インストーラを作成した場合に、その後のデバイス・プラグイン時に自動インストールが出来ないという影響があるので困ったものです。どうやって対応しようかと考えています。

はい、その点は十分

はい、その点は十分満たしています。
毎回infを書き換えるたびにcatファイルを作成して、
catファイルに署名しなおしています。

1点だけ、 >

1点だけ、

> これを書き換えたり、元に戻したりなどすると、必ず再現できることがわかりました。

当然ながら、これを書き換える度に毎回必ず、セキュリティカタログ(.CAT)ファイルを1から作成し直して、
そしてそのCATファイルに毎回、SPC署名を付けているのですよね。

もしそうでなく、署名付CATファイルはそのままで、INFファイルを変更しているのだとしたらば、それが原因です。
署名とはそういうものです。CATファイルが作られた時から1文字も変更されてない時にだけ、有効に働きます。

お返事が大変遅れて

お返事が大変遅れてしまいました。
今はドライバ本体のバグがありその修正をしています。とほほ。

と、別ドライバを先にリリースするということになっており、そちらでこちらのスレッドに関するテストを行いました。

いろいろとお騒がせしていましたが、Hidakaさんのサンプルインストーラで自分の署名に置き換えたり、INF内を書き換えてテストしたところ、原因は[Version]のClassを変更すると認証画面が出たり出なかったりします。

HidakaさんのサンプルインストーラはClass=Sampleとなっています。一方、こちらのINFはClass=Portsです。これを書き換えたり、元に戻したりなどすると、必ず再現できることがわかりました。

いわゆる仮装コムドライバなのでClassはPortsにしています。

というわけですが、このようなあ場合はドライバとcatに署名してあったとしてもロゴ認証画面はプリインストール時でも出てしまうという理解をしています。

これについて、この理解で回避策やアドバイスがございましたらよろしくお願いします。

ちなみに、WinXP SP2はドライバの最小条件の下でテストするためにこの環境にしていました。署名に関してはややこしいことがあること、アドバイスありがとうございます!
高速なマシンにしたら、バグが出たというのが今のデバッグ作業なんですがね(汗)。

XP-SP2とは結構古いで

XP-SP2とは結構古いですね。
確かこのOSでは、SPC署名付きドライバのインストールに対する動作が、怪しかったように思います。

記憶を頼りに書きますと、この頃は確かWindows Updateでルート証明書の更新の最新版をインストールしないと
SPC署名のドライバのインストール時に「ドライバに署名が無い」の警告が出ていたと思います。
# 「ロゴ認証画面」とは、「ドライバの署名無し警告」の事ですよね。

しかしインストール方法やdpinstのパラメータによって警告が出たり出なかったり、というのは経験ありません。

Windows Vistaが出てKMCSやSPC署名の方法が公開された頃(XPがSP2からSP3になった頃)に、
SPC署名はセキュリティカタログ(.CAT)だけでなく、「.SYSファイルやDLLにも署名せよ」
とMicrosoftから聞いた(文献で見た?)ので、私の場合は以降、特に考えずに、なるべく両方に署名しています。
ですので.SYSファイルに署名が無かったときに警告が出る場合があるか、ということはわかりません。

> dpinst実行時、認証を表示させないためには、sysファイルにも署名しなければならないのでしょうか?

「.SYSファイルやDLLにも署名せよ」というのは、警告を表示させないためではなく、
そのファイルのプロパティを表示させた時に素性がわかるようにしておく、という意味だったと思います。

ただ前述の様に、XP-SP2はSPC署名付ドライバ自体が認知されていない時代のOSですので、
SPC署名付ドライバのインストールに対して「署名無しの警告を出さない」という動作が、
正しく行われない場合があるのかも知れません。

なるほど、署名付き

なるほど、署名付きドライバに legacyModeフラグを使うとこういう現象になるんですか。
そんな(いぢわるな?)設定は試したことがなかったので勉強になりました。

再インストール時のロゴ認証の挙動についてですが、基本的にアンインストールで完全に削除されるはずなので再実行で問題は出ないはずです。
しかし、先の現象でドライバのインストール状態がおかしくなっていたのかもしれませんね。
(その証拠にINFファイルが残っていたのだと思います)

次の対処としてINFを削除されていますが、hogehoge.infを削除した時に hogehoge.pnfも一緒に削除されましたか?
pnf(infのバイナリ表記)が残っているとドライバのインストールが失敗することがありますよ。

以上、ご参考までに。

追記と質問です。 .sys

追記と質問です。

.sysファイルに対しても署名を行いました。
dpinst実行時、認証を表示させないためには、sysファイルにも署名しなければならないのでしょうか?

また、
一度インストールして、プログラムの追加と削除でアンインストールを行い、PCの再起動を行ってから、再度、dpinstでインストールしようとするとロゴ認証画面が表示されてしまいました。

windows\infのコピーを削除してからも、試してみましたが、やはり認証画面が表示されてしまいます。

おかしいと思って、
システムの復元で、ドライバのインストール以前にもどしてから、dpinstでインストールを行ったところ、認証画面は表示されませんでした。
この理由はなぜでしょうか?

backyさん、hidakaさん、

backyさん、hidakaさん、コメントありがとうございました。

コメントしていただいていたのを、今気がついて、お二人のアドバイスをもとに検証しました。

結論から先に書きます。

dpinst.xml中の の記述が悪さしていました。
デジタル署名されたドライバでこのフラグをセットすると反対に先の投稿で述べた現象が発生しました。

OSはXP-SP2で、dpinstはV2.1.0.0(07/2009)です。

お二人のご助言で感嘆に解決できました。ありがとうございました。

質問の内容はわかり

質問の内容はわかりました。
しかし実行条件に不明な点があるので、以下を教えて下さい。

1.インストール先のターゲットOS名、SP種類

2.インストール先のターゲットOSにおいて、Windows Updateでルート証明書の更新の最新版を
実行したか。もしもしてない場合、ルート証明書の更新を実行しても状況は変わらないか。

3.(差支えなければ)CAによる署名を付加した際に証明書を提供したCAの業者名

4.CATファイルとSYSファイルの両方に署名したかどうか。
してない場合、両方に署名しても変化がないか。

5.dpinstの入手先

DPinstの

DPinstの legacyModeフラグでは回避できないでしょうか?

バッキー@最近ドライバ周りはとんとご無沙汰です