Windows10におけるデバイスドライバ
ASUS製のWindows10のマシンで、OSを再インストールしたら、Kintex-7のPCI Expressボード「Cosmo-K」用のデバイスドライバが動かなくなってしまいました
あれ・・・?買ったときには動いていたのに。なぜ??
ちゃんとSHA256でカーネルモードの署名をしているのに、署名が検証できないと出てしまいます。
署名や証明書に問題はないはずなのですが・・
どうやらWindows10では、署名だけではドライバは動かないようなのです。
詳しいことは下記のページにありました。
https://blogs.msdn.microsoft.com/jpwdkblog/2016/10/26/windows-10-anniversary-update-signing-policy/
Windows10のAnniversary Update以降では、自分で署名したドライバは動かず、Microsoftが署名したドライバでないと動かなくなったようです。
この仕様を自分で回避する方法は4つあって、
- Windows10がAnniversary Update以前のものからアップデートされている
- PCでセキュアブートを無効にしている
- 証明書が2015年7月29日以前に発行されている
- ドライバがOS起動時にロードされる(一時的な措置であり、将来無効になるかも)
のどれか1つが満たされていれば、自分で署名したドライバでも動くようです。
つまり、Microsoftの考えでは、昔からアップデートして使っていたユーザや昔から存在したドライバは使えるように温情をかけてやるけど、新しく作ったドライバはMicrosoftの管理下に置かせろ、というわけです。
我々開発者は、ドライバの開発の段階ではデバッグやビルドを繰り返すわけですから、いちいちMicrosoftの署名など申請するわけにはいきません。
自己防衛できることはセキュアブートの無効化くらいしかありません。
セキュアブートについて調べてみると、セキュアブートというのは署名のないOSは起動させないようにUEFI(BIOS)が制限するというもののようです。ウィルスとかマルウェアがOSの重要なファイルを書き換えて乗っ取るのを防ぐ仕組みのようで、UEFIレベルで証明書とか署名とかややこしいことをするようになったようです。
はぁ、なんとも生きづらい世の中になったものです。
私が自宅で使っているASUSのPC()は、UEFIにセキュアブートを無効にする、という項目はなく、セキュアブートの欄は灰色で常にEnabledになって変更できませんでした。
ですが、OSのタイプをWindowsではなく、Other OSにしたところ、セキュアブートが無効にできました。
セキュアブートが有効になっているかどうかは、Windowsの「ファイル名を指定して実行」のところで、msinfo32.exeと打つと出てくる以下のツールで見ることができます。
この状態ならば、無事にドライバの読み込みができました。
これで一件落着なのですが、あくまでも一時的な回避策です。
商品として売る以上、お客様に「セキュアブートを無効にしてください」とお願いするのもよくないので、最新のカーネルモードドライバの作り方を勉強して、Microsoftの署名をもらう方法を調べたほうがいいかもしれないと思います。
| 固定リンク
コメント