第一章Windowsデバイスドライバ設計Hello World
Hello Worldはプログラム設計の古典であり、ほとんどの言語教育はこれを先頭にしている.このチュートリアルもこれで始まります.
まずCのHello Worldを見てみましょう.
それをhelloとして保存します.c,VCまたはgcc helloを用いる.cは実行ファイルを生成し、実行ファイルを実行すると結果が表示されます.
ドライバのHello Worldは少し複雑です.
ドライバのエントリ関数はDriveEnteryです.そのため、最も簡単なWDMドライバコードは以下の通りです.
コンパイルして、実行して、このHello Worldの結果を見るのは面倒です.まず、DDK(Driver Develpment Kit)を持っていなければなりません.ネットでダウンロードしたり、CDを買ったりすることができます.DDKには豊富な例があり、一般的なドライバはDDKの例を参考にすることができます.
ファイルをhelloとして保存します.c、もちろん前にinclude ddkのヘッダファイルをください.
このファイルをコンパイルするには、makeファイルとresourceファイルを作成する必要があります.ddkではmakeファイルはすべて同じです.
makefileの内容は次のとおりです.
一般的にこのファイルを変更しないでください.ソースファイルに追加するにはsourcesファイルを編集する必要があります.
簡単なsourceファイルは次のとおりです.
この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は以下の通りである.
コンパイルしてくれSysはシステムのドライバディレクトリの下C:WINDOWSsystem 32driversにコピーし、オペレーティングシステムを再起動します.このドライバは起動時にロードできます.ハローワールドを見たい!Debugviewというソフトウェアに従うことができます.これは簡単で使いやすい駆動デバッグツールで、DbgPrintが印刷したロゴを表示することができます.Debugviewのcaptureメニューのロゴbootを選択するには、bufferオペレーティングシステムbootのときのロゴを選択します.
再起動するとdebugviewからlogが見えます.
まず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が見えます.