Help us understand the problem. What is going on with this article?

Windowsカーネルモードドライバ(KMDF)の開発環境を構築する

kmdf1.png

はじめに

今回は、Windows カーネルモードドライバ(KMDF)の開発環境を構築します。

環境

・メインPC
Windows 10 1903 Build 18362.476

・仮想環境
Oracle VM VirtualBox
Visual Studio 2019 Community
Windows 10 1903 Build 18362.30

既にメインPCでは環境構築済の為、仮想環境にて作業を行います。

VisualStudioのインストール

既にインストールされている方は、必要なコンポーネントがインストールされていることを
「VisualStudio Installer」で確認して次に進んで下さい。

VisualStudioをインストールされていない方は、下記コンポーネントをインストールして下さい。
・C++によるデスクトップ開発
・ユニバーサルWindowsプラットフォーム開発
5021da5523bd023abb2cc018bfa149ed.png

Windows Driver Kit (WDK)のインストール

下記リンクより、WDKをインストールして下さい。
https://docs.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk
ここで注意点です。
WDKのインストール後は必ずパソコンを再起動して下さい。

私は再起動を怠ったばかりに1日を無駄にしてしまいました。

70ffff5346370ca9af835fc0e0b92b4f.png

f8f7aa8e501b3190e717710c59cb539e.png

匿名データ送信をするか否か
今回の例ではNoを選択。

4f094b344edbc2c1d82fe08fb6665f83.png

利用規約

ae47019fcfeff6cec3f362061451b0ce.png

VisualStudio拡張をインストールします。

833f3cce674d851a390bb7384430177b.png

6bdc3d3e6b281f9295694a36b70a58c6.png

終了したら、パソコンを再起動します。

環境構築終了

再起動後に、VisualStudioの新規プロジェクトにこの様な項目が追加されていれば構築成功です。
PCの再起動を怠った場合、ここで表示されませんでした。
e20575af369ae8a8e4f9177c35343121.png

Hello Worldしてみる

Kernel Mode Driver Emptyを選択し、プロジェクトを新規作成します。

f79c26e6a872e007acfa48063114d0bb.png

9ebbf6a2ef5798db32b4dbbef5e1e099.png

プロジェクトの作成が完了したら、新しい項目から、driver.cを追加します。
今回はデバッグプリントを出力する簡単なドライバーです。
完全なコードは以下の通りです。

87aa96ae9a64f2ca335fc6bc23174eef.png

ビルド

早速ビルドしてみます。

c56e42f14d54e41d79efb3a449462a7f.png

この様なエラーが出力された場合、VisualStudioインストーラーでSpectre軽減策ライブラリをインストールするか、下記のように設定して下さい。

プロパティ -> C/C++ -> コード生成 -> Spectre軽減策:無効
6c883251300066dc8c311cbfcaa29d83.png

次のエラーです。

dc0577bb49fd882af083ea79dc90f3f0.png

今回の例では、pragma warningを使用して警告を無視します。

#pragma warning(disable: 4100)

修正後のソースコードは以下の通りです。

bda21ba94cbf0d16cf6881a49dda22d6.png

無事、ビルドできました。

1eb91964903f266c0f520f0efc80e801.png

sysファイルは以下ディレクトリに生成されます。

8db1d9cafbbbc599690a382782ee6b3e.png

実行してみる

実行にあたって、DebugViewを使用します。
https://docs.microsoft.com/en-us/sysinternals/downloads/debugview
Capture -> Capture KernelEnable Verbose Kernel Outputを有効にして下さい。

コマンドプロンプトを開き、下記コマンドでサービスを生成/開始します。
今回の例では、batファイルを作成しました。

※batファイルは管理者で実行する必要があります。

start.bat
@echo off
sc create myKMDF binPath="<フルパッチ>\myKMDF.sys" type=kernel
sc start myKMDF
sc delete myKMDF
pause

※注意
Windowsでは、通常 未署名のドライバをインストールできません。
6f5ba28ca0fe0e0dec0fe8e1dc742ec5.png

今回はテスト用ドライバのインストールの為、未署名ドライバのインストールを許可します。
コマンドプロンプトを管理者起動し、以下コマンドを入力し、コンピュータを再起動します。

bcdedit /set testsigning on

無事インストールできました。

199297669c4cf4eee1750cc6fe4ee2cc.png

DebugViewでも、ログを確認できました。

33ff48bc6d9555e3e7ccb486904ffa73.png

最後に

個人的に躓いた点がいくつかあったので、記事にしてみました。
今後、ドライバの開発に興味を持たれている方の参考になれば幸いです。

kkent030315
もうすぐ高校1年生です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした