Top 最新情報 会社概要 セミナー 製品 開発者向 サポート download 問い合せ English
Windows Linux NETMF H8マイコン FPGA SHSMOD E-Kit WDDDC techmemo

Windowsデバイスドライバ開発のためのヒント


Windows 10 時代の デバイスドライバー 開発情報

最近はWindows ドライバーの開発ツールが進化して、ドライバーのサンプルも更新・追加され、Microsoftのドキュメントが英語版も日本語版も充実して来たので、Windows ドライバーもかなり開発し易くなりました。以下、Microsoftのサイトのリンクを中心に、最新のWindowsドライバー開発事情やホントを紹介します。

開発ツール

最初に訪問するサイト: Windows Hardware Developer Center

ドライバー開発ツールがダウンロードできる上記のサイトです。忘れてしまった場合は、Windows Hardware で検索できます。Windows Driver Kit (WDK)今すぐダウンロード をクリックすると最新ツールが入手できる Windows Driver Kit (WDK) のダウンロード ページに移動します。

現在サポート対象のWindows ドライバーは基本的に、最新版のVisual Studioと、ここから入手できる、最新版のWindows Driver Kit (WDK)を使用して開発します。例えば2019年11月現在だと、Windows 7からWindows 10 1909用までのドライバーが、Visual Studio 2019とWDK for Windows 10 Version 1903を使用して開発できます。(参考情報:OS にはサポート期限があります!

インストール

開発用ホストマシン(PC)に、@Visual Studio、AWDKの順番にインストールします。開発用ホストPCとしては、サポート対象の全 Windows OSが利用できますが、最新のWDK環境で プロビジョニングが使えるのはWindows 10だけなので、通常Windows 10を使用します。Visual Studioのインストールでは次の項目を選択してインストールします。

  • ユニバーサルWindowsプラットフォーム開発
  • C++によるデスクトップ開発
  • Windows SDK最新版 (通常デフォルトで選択済)

開発環境の構築

基本的にホストとターゲットの2台以上の物理マシンを用意して開発します。異なるOSバージョンやハードウェアでの動作を確認するため、または異なるバージョンのビルドツールの動作状況を確認するため、ホストやターゲットを複数台用意して使用することは良くあります。

実際のところ Windows の新リリースが半年毎になり、WDKとそれを組み込むVisual Studio のUpdateも頻繁に行われる様になりました。例えば現時点では1909, 1903, 1809, 1803 のOSリリースがあり、1909を除くそれぞれのリリース用のWDKやVisaul Studio が存在するため、Windows OSのリリースの違いだけでなく、WDKやVisual Studioのバージョン差異による問題に気を付ける必要があります。

ドライバー開発で使用するマシンは、ネットワークごと一般ネットワークから隔離して、ウイルスチェックソフトウェアやセキュリティソフトウェアは一切使用しません。Windows ドライバー開発開発の妨げになる可能性があるためです。一方でカーネルモードドライバー等のデバッグ時に、インターネット経由でMicrosoftのシンボルサーバーに接続する事がほぼ必須なため、ファイアウォール経由でインターネットに接続できる環境を容易します。例えば次の様に一般の運用環境とは切り離したドライバー開発環境を構築する必要があります。

ホストマシン

ドライバーをビルドして、開発中のドライバーのターゲットでの実行状況をモニター、デバッグするマシンです。原則として最新のWindows をインストールして、さらにWindows Updateで最新版にしておきます。開発に集中するために、Windows Updateを一時中断して運用する場合があります。Windows ドライバー開発は(ビルド環境と実行環境が異なる)クロス開発が大前提のため、開発対象のドライバーをホストマシンにインストールして実行することは通常ありません。

ターゲットマシン

開発対象のドライバーを実行する環境です。開発動作対象のWindows をインストールして、原則としてWindows Updateで最新版にしておきます。開発に集中するために、Windows Updateを一時中断する場合があります。基本的に開発対象のドライバーに関係無いデバイス、ドライバーやアプリケーションは一切インストールしません。これは開発専用マシンなので、開発中のドライバーをテストする以外の目的には使用しません。ユーザーモードドライバーの開発では、ホストマシンにドライバーをインストールして実行・デバッグすることも可能ですが、お勧めしません。

ソースコードとビルド

新規に開発するドライバーの元となるソースコードを入手する方法は一般に、次の三種類の方法があります。

  • Visual Studio のドライバーテンプレート機能でドライバーのひな型を作成して、それに機能を追加していく方法。
    比較的単純なドライバーの開発とドライバーの特定機能について実験、検証する場合に利用します。
  • Windows Driver サンプルからコピーして、それに追加・変更して行く方法。
    最近の主流です。ドライバー開発に慣れている人ほど、再利用するべきコードのサンプル見つけるのが上手です。
  • その他の方法。
    会社内で利用していた古いコード等、上記以外の手段で入手したコードに追加・変更する方法も根強く残っています。Windows 7以前の古いWDK, DDKには前述の Windows Driver Sample には無いサンプルコードが含まれているので、それを利用する場合もあります。以前のWDMのサンプルの大半がWindows 7の頃にWDFに書き換えられたので、WDMのサンプルを入手する手段として、Vista用のWDKを入手して活用する方法があります。古いWDKやDDKはMSDN ダウンロードで入手可能です。

ドライバーソースコードの編集とビルドは通常、Visual Studio を使用して行います。Visual Studio を使用せずに、Windows Driver Kit (WDK) のダウンロード ページからダウンロードできる EWDK (Enterprise WDK for Windows 10) を使用する方法もありますが、ドライバービルド時の設定やソースコードデバッグが面倒なので、お勧めしません。

デバッグ

デバッガーはWDKとともにインストールされるカーネルデバッガー WinDBG を使用します。ユーザーモードドライバーのデバッグでは、WinDBG のほかに Visual Studio の C++ デバッグ機能を使用することもできます。ドライバーを Visual Studio でビルドする場合、WinDBG は Visual Studio に組み込まれて動作します。Windows 8 からドライバーのビルド、LAN経由でのターゲットへのデプロイ、LAN接続経由でのカーネルデバッガーの起動がF5キーだけでも行えるようになりました。この様な環境の構築を、プロビジョニングと呼びます。プロビジョニングに関しては以下のリンクを参照してください。リンク先のURLに wdk-8-1 の字が含まれますが、この説明が掲載されたのがWindows 8.1 WDKだったためなので、気にする必要はありません。またWinDBGは大昔からと同様に、Visual Studio を使用せずに、単独で立ち上げて利用することも可能です。

ドライバーの展開およびテストのためのコンピューターのプロビジョニング (WDK 10)

バージョンと互換性

Windowsは古くから、OSとしてドライバーの互換性を重視して新バージョンが開発されて来ています。つまり動作させたいと思うOSバージョンの中で、一番古いバージョン用に、ドライバーをビルドしておけば、多くの場合同じバイナリーまたは同じソースコードが以降のWindowsでも利用できます。(一部例外はあります)

WDFドライバーではバージョン番号が明確に規定されているため、この後方互換性を利用することで、用意するドライバーバイナリー・パッケージを減らすか一つにすることが可能です。ただしWindows 7, Windows 8とWindows 10ではドライバー署名の制約が異なるので、その点には注意する必要があります。次のリンクにWDF (KMDFとUMDF) とOSの関係が記載されています。

KMDF のバージョンの履歴

UMDF バージョン履歴

ビルドするドライバーの動作対象WDFは、次の様にVisual Studioのプロパティで設定できます。

ビルドするドライバーの動作対象OSの設定も、次の様に容易です。Windows 7 用ドライバーのビルドに Windows 7 WDKをインストールする必要はありません。常に最新状態にアップデートしたVisual Studioと最新の WDK だけを使用します。

ユニバーサルドライバー

ユニバーサルドライバーは、Windows 10のリリースの際にWindows 10 IoT CoreやWindows Mobile等とドライバーアーキテクチャーを統一させるために、導入されたものです。いくつかの古いWindows時代の機能を廃して、新しく整理されたものなので、ユニバーサルドライバーが動作しないWindows 8 .1以前の環境で使う予定が無ければ積極的に対応し、また利用するべきです。


フォーラムと掲示板

日本語
英語

参考ページ

Windows Hardware and Driver Developer Blog (英語)

Japan WDK Support Blog (終了)

Windows ハードウェア認定ブログ

Windows 10用ドライバー署名(2019年版)

ハードウェア開発者向けのサポートとコミュニティ (やや古い)

CQ出版 特集 Windows 7 時代のデバイス・ドライバ開発

CQ出版 連載 Windows Vista時代のデバイスドライバ開発 各回の概要

BCDedit 簡単操作法

Windows 8 Driver Sample

MSDNの価格

MSDNでダウンロードできるソフトウェア



株式会社デバイスドライバーズ

誤りや不明な点はご指摘ください。
文責:日高亜友
Microsoft MVP for Windows Development

Copyright(c) 2019 Device Drivers Limited