第一章Windowsデバイスドライバ設計Hello World


Hello Worldはプログラム設計の古典であり、ほとんどの言語教育はこれを先頭にしている.このチュートリアルもこれで始まります.
まずCのHello Worldを見てみましょう.int main()
{
    printf("Hello World!
"
);
    return 0;


それをhelloとして保存します.c,VCまたはgcc helloを用いる.cは実行ファイルを生成し、実行ファイルを実行すると結果が表示されます.
ドライバのHello Worldは少し複雑です.
ドライバのエントリ関数はDriveEnteryです.そのため、最も簡単なWDMドライバコードは以下の通りです.NTSTATUS
DriverEntry (
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
    DbgPrint(("Hello World!
"
));
    return STATUS_SUCCESS;
}

コンパイルして、実行して、このHello Worldの結果を見るのは面倒です.まず、DDK(Driver Develpment Kit)を持っていなければなりません.ネットでダウンロードしたり、CDを買ったりすることができます.DDKには豊富な例があり、一般的なドライバはDDKの例を参考にすることができます.
ファイルをhelloとして保存します.c、もちろん前にinclude ddkのヘッダファイルをください.#include <ntddk.h>
このファイルをコンパイルするには、makeファイルとresourceファイルを作成する必要があります.ddkではmakeファイルはすべて同じです.
makefileの内容は次のとおりです.#
# DO NOT EDIT THIS Edit .\sources. if you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#

!INCLUDE $(NTMAKEENV)\makefile.def

一般的にこのファイルを変更しないでください.ソースファイルに追加するにはsourcesファイルを編集する必要があります.
簡単なsourceファイルは次のとおりです.TARGETNAME=hello
TARGETPATH=obj
TARGETTYPE=DRIVER


SOURCES=hello.c

この3つのファイルがあればドライバhelloをコンパイルできます.sysです.
まずコンパイル環境に入り、開始->Development Kits->DDK XXXX->build enviorenments->windows XP->Windows XP Checked Build Environment.
この3つのファイルの格納ディレクトリに入り、buildを実行します.コンパイルが完了すると、ディレクトリの下にobjchk_が生成されます.wxp_x 86i 386、下にファイルがあります.Sys、これが私たちの最初の成果です.
どのようにして実行結果を見ることができますか?このドライバをオペレーティングシステムにロードする必要があります.最も簡単なロード方法は、レジストリを書くことです.ここにあります.regのファイルは、レジストリの変更を支援したり、手動で変更したりすることができます.hello.regは以下の通りである.
  REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hello]

"ErrorControl"=dword:00000001

#
# When to start the driver:
# At boot: Start=1
# Manually: Start=3
#
"Start"=dword:00000001

"Type"=dword:00000001

コンパイルしてくれSysはシステムのドライバディレクトリの下C:WINDOWSsystem 32driversにコピーし、オペレーティングシステムを再起動します.このドライバは起動時にロードできます.ハローワールドを見たい!Debugviewというソフトウェアに従うことができます.これは簡単で使いやすい駆動デバッグツールで、DbgPrintが印刷したロゴを表示することができます.Debugviewのcaptureメニューのロゴbootを選択するには、bufferオペレーティングシステムbootのときのロゴを選択します.
再起動するとdebugviewからlogが見えます.