Windowsデバイスドライバ開発 - devdrv.co.jp · 2005/9/14 Device Drivers Limited...

34
2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 1 Windows デバイスドライバ開発 デバイスドライバーズ [email protected] デバイスドライバ開発技術者育成講座 本テキストの内容は出版を予定しているため 複製を禁じます

Transcript of Windowsデバイスドライバ開発 - devdrv.co.jp · 2005/9/14 Device Drivers Limited...

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 1

Windowsデバイスドライバ開発

デバイスドライバーズ[email protected]

デバイスドライバ開発技術者育成講座

本テキストの内容は出版を予定しているため複製を禁じます

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 2

Windowsの進化

n WindowsはDOSから進化してきた

Windows3.0/3.1(1)

Windows1.0/2.0/386

Win98

WindowsNT 3.1

WindowsNT3.5/1

WindowsNT 4.0

Windows2000

WindowsCEAtWork

Win95

CE 3.0

8086 80286 80386 (IA32)

EMS/XMS/DOS Extender/VCPI/DPMIMS-DOS

IA64

WinME

Talisker

WindowsXP / SP1a

OS/2 1.0 OS/2 2.0

386SX

T-engine?

2003sv

longhorn

AMD64/EM64T

XPSP2

2003SP1

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 3

Windowsのドライバ

n 各バージョンに対応するドライバ

MS-DOS Windows3.1

WindowsNT4.0

Win98 / Me

Windows2000 / XP / 2003

WDM(.SYS)

Kernel Mode.SYS

VxD(32bit)RealMode

.SYSTSR.EXE .DRV(16bit)

Windows95

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 4

セグメント- 16bitから32bitへ(1)

n 8086時代のセグメント

0xA000

<a0000h番地に0fhをWrite>

mov ax,0a000hmov ds,axmov bx,0mov al,0fhmov ds:[bx],al

0x0000

16ビット

16ビット

20ビット

+)

セグメント・レジスタ

ベース・レジスタ

0xA0000

+)

出力アドレス

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 5

セグメント- 16bitから32bitへ(2)

n 80286のプロテクトモード

16ビット

16ビット

24ビット

+)

セレクタ(セグメントレジスタ)

セグメント・ベース・アドレス

出力アドレス

24ビットベース・レジスタ

ディスクリプタ・テーブル

64ビット

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 6

RAX EAX

AMD64 / EM64Tのアーキテクチャ

n レジスタ ALAH

RBX

RCX

RDX

RBP

RSI

RDI

RSP

RIP

ESP

EDI

ESI

EBP

EBX BLBH

ECX CLCH

EDX DLDH

EIP

RFLAGS EFLAGS

R15R14R13R12R11R10R9R8

BP

SI

DI

SP

IP

FLAGS

XMM0XMM1XMM2XMM3XMM4XMM5XMM6XMM7

XMM8XMM9XMM10XMM11XMM12XMM13XMM14XMM15

CS DS ES FS GS SS

MMX0 / FPR0MMX0 / FPR0MMX0 / FPR0MMX0 / FPR0MMX0~7 / FPR0~7

63 31 15 7 0

63 31 15 0

EM64T拡張部

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 7

ドライバの階層構造n さまざまなデバイスドライバ

Hardware

デバイスドライバ

ミニポートドライバ

ポートドライバ(共通部分)

アプリケーション

クラスドライバ(共通部分)

フィルタドライバ

HAL

ユーザモードドライバ

ベンダドライバ

DLL

他のドライバ

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 8

カーネルとデバイスドライバ

n カーネル構成モジュール

NTカーネル

デバイスマネージャ

デバイスドライバ

割込コールバック

デバイスドライバ

デバイスドライバ

IOマネージャ

デバイスデバイス

デバイス

デバイス管理

ファイルシステム

PnPPower ...

......

ネットワーク

プロセス管理 メモリ管理リソース オブジェクト セキュリティメッセージ

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 9

PCのアーキテクチャ

n 典型的なデスクトップPCの内部構成例

USBCont.

CPU

South Bridge

North Bridge メモリビデオ

LPC/ISAバス PCIバス

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 10

階層化ドライバ・アーキテクチャ

n USBジョイスティックの例

PCIバス・デバイススタック・ドライバ

USBホスト・コントローラ・ドライバ

USBハブ・ドライバ

USBプロトコル・ドライバ

HIDクラス・ドライバ

HIDミニポート・ドライバ

pci.sys

hidusb.sys

usbd.sys

usbhub.sys

uhcd.sys/openhci.sysusbehci.sys

xxxxx.sys

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 11

用語

n IOマネージャn デバイスの管理

n デバイスドライバへのサービスの提供n IRP(I/O Request Packet) を用いた通信制御

n IRPn カーネルとデバイスドライバの通信手段

struct IRP

IoStatusヘッダー

スタックI/Oスタックロケーション

I/Oリクエストの内容を保持

I/Oステータスブロック

I/Oリクエストの状態

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 12

用語(続き)

n ドライバ・オブジェクトn ドライバのロードに作成される

n ドライバ自身のコードとデータ

n デバイス・オブジェクトn 各物理デバイス毎に存在

n デバイス管理

n IRQL(IRQレベル、または割り込み要求レベル)n ハードウェア割り込みを抽象化された割り込みへ変換

Driver Object

Device Object

Device Object

StartIo()

Unload()

Function()

Function()

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 13

デバイスドライバの内部構造

n デバイスドライバの内部構造の例

DriverEntry()

ディスパッチ・ルーチン群

割込み処理ルーチン群

★マルチスレッド処理が基本

登録

登録

バックグラウンド処理

呼び出し

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 14

ディスパッチ・ルーチン

n DriverEntryで登録するコールバック・ルーチンn ソフト割込みで実行され、優先順位は高いn DISPATCH_LEVEL

n ユーザ要求以外に、システム、OSから発行される

n カーネルからの呼び出しシーケンスは決まっている

n 処理のパラメータはIRPに載っている

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 15

ディスパッチ・ルーチンの例

n 一般的なディスパッチ・ルーチンの例

DriverEntry()

AddDevice()

Unload()

PnP()

Power()

Create()

Close()

Read()

Write()

DeviceControl()

… …()

StartIo()

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 16

IRQレベル

n 理想化された抽象的なプライオリティレベル発生元

Hardware

Software

IRQL

HIGHEST_LEVEL

POWER_LEVEL

IPI_LEVEL

CLOCK2_LEVEL

CLOCK1_LEVEL

PROFILE_LEVEL

DIRQL

DISPATCH_LEVEL

APC_LEVEL

PASSIVE_LEVEL

目的

マシンチェック、バスエラー

電源異常割込み

マルチプロセッサ通信

インターバルクロックー2

インターバルクロックー1

プロファイリング・タイマー

I/Oデバイス割込み要求(プラットフォーム依存)

スレッド・スケジューラ

非同期処理

標準的なスレッド実行レベル

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 17

Buffered I/OとDirect I/O

n Buffered I/On 入出力の度にカーネル内バッファに一度コピーされ

n Direct I/On MDL構造体を使って直接メモリを操作n DMA等のハードウェアを効率良く扱える

n Neither I/On BufferedでもDirectでも無い方法、IRP上の

UserBuffer領域を利用して入出力n あまり使わない

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 18

ドライバ開発手法

n Windows DDKn Microsoftのツール

n サードパーティーのツール

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 19

Windows DDK

n ターゲットOSと、ドライバのタイプによって開発手法が異なるn DDKとコンパイラに依存し、開発環境のOSには依存しない

• DDKとSDKとVC1.5xとMASMが必要(16ビット)• VC1.5x, VC4.xとMASMが必要(一部の古いVxD)• VC++6.0が必要(W2K-DDKまで)• XP-SP1-DDK以降はコンパイラ付

WinXP SP1

WinNT .SYS

Win98/Me WDM

Win98/Me 32Bit VxD

Win2K / WinXP

Win98/Me 16BitVxDと古いVxD

XP-SP1-DDK

W2K-DDK98-DDK

NT-DDK

95-DDK

sv2003SP1

sv2003-DDK

IA-64

AMD64 / EM64T

sv2003

WinXP SP2

Vista

sv2003-SP1-DDK

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 20

古いDDKn Win95 DDK

n Windows MeまでのVxD開発には、ほぼ必須 (サウンド、ビデオ...)

n Win98 DDKn Windows 98SEの開発には、必要と言われている

n WinNT DDKn Windows NTのドライバ開発には必須

n Windows2000 CompleteDDK Aug7n W2K-SP2 / Me対応n 現在はsv2003DDK利用を推奨

n WindowsXP 無印 DDKn 廃止

n WindowsXP SP1 DDKn W2K(SP4) / WinMeにも対応

n MSDNの公式サポート見解

Title Support? Availability

Microsoft Windows 2000 DDK Yes Provided in Windows Server 2003 DDK

Windows XP SP1 DDKWindows 98 DDKWindows NT® 4.0 DDK

No Available to MSDN subscribers in the archives at MSDN Subscriber Downloads

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 21

どのDDKをつかうべきか?

n MSDNの公式サポート見解If you write drivers for … Use this DDK Use this HCT

Microsoft Windows Server™ 2003 SP1 (not released now)(x86, x64, AMD64)

Windows Server 2003 Service Pack 1 DDK(Beta; available to MSDN Subscriber Downloads)

HCT 12(HCT 12.0 for preliminary testing; HCT 12.1 Beta; available to MSDN subscribers)

Windows Server 2003 family released products(x86 and Intel Itanium)

Windows Server 2003 DDK HCT 11.2

Windows XP Family(including Service Pack 2)

Windows Server 2003 DDK(for SP2-specific technologies, see Windows Server 2003 Service Pack 1 DDK)

HCT 12.x

Windows 2000 Family Windows Server 2003 DDK HCT 11.2

Windows Millennium Edition(unsupported)

Windows XP Service Pack 1 DDK(Available in the archives at MSDN Subscriber Downloads)

HCT 9.6(This product has been discontinued and is unsupported)

Windows 98 Second Edition Windows 98 DDK(Available in the archives at MSDN Subscriber Downloads)

HCT 9.502(Download from Device Testing or System Testing)

Microsoft Windows NT Workstation(unsupported)Microsoft Windows NT 4.0 Server

Windows NT 4.0 DDK(Available in the archives at MSDN Subscribers)

HCT 9.502(Download from Device Testing or System Testing)

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 22

伝統的な開発手法

n Windows DDKの特徴n ライブラリ、サンプルコード、ツールとコンパイル環境を提供n MSDNはほぼ必須(MSDNだけで入手できる情報)

n サンプル・コードや情報は頻繁にUpdateされる

n http://www.microsoft.com/ddk/ から申し込む(ダウンロード不可)

n デバイスドライバ開発に必要な情報は、DDKのHelpにある→MSDNライブラリにも収録

n XP-SP1-DDK以降、VC++相当のコンパイラが付属

n コンパイルはコマンドプロンプトで行う

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 23

伝統的な開発手法(続き)

n WinDbg (うぃんでばっぐ)n Microsoftが提供するデバッグ手段

n 通常は2台のPCをシリアル・クロスケーブルで接続

n Target側で、boot.iniで/debugオプションを指定して立ち上げる

n Host側でWinDGBを立ち上げる

n リソースが少ない場合は動作が遅い

Target側 Host側デバッギー

デバッガー

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 24

Microsoftが提供する開発ツール

n Windows DDKn ダウンロード不可、実費提供またはMSDNで提供n 現在はコンパイラ、アセンブラのほか、各種開発ツールが入っている

n Debugging Toolsn 以前は個別に提供していたものをまとめて提供n http://www.microsoft.com/ddk/debugging/からダウンロード可能

n HCTn ダウンロード不可、実費提供またはMSDNで提供

n Driver Verifiern Windowsとともに提供

n GUIDGENn コンパイラやDDKとともに提供

n Virtual PCn 製品として提供(旧Connectix社製)、1台でWinDbgを実行できる

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 25

WHQLとHCT

n HCTとは?n Hardware Compatibility Test

(WHQL: Windowsロゴ取得のためのテスト)n 最新版は12.1 (XP SP2, 2003serverSP1用) n Windows XP SP1/2003serverは、11.2を使用

n 10.x(無印XP用)は今後サポートされない)

n http://www.microsoft.com/whdc/hwtest/

n (主にOEMメーカ向け)無料サポートメール• "Windows Hardware Quality Labs. Japan“

[email protected]対応はやや遅いが、強力なサポートやヒントが得られる

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 26

WHQLとHCT

n WHQLとは?n ハードウェアのためのWindowsロゴ・プログラム

http://www.microsoft.com/hwdq/hwtest/n このハードウェアとデバイスドライバは、指定バージョンの

Windowsが正しく動く(動作を妨げない)というマーク

n HCL (Hardware Compatibility List) に掲載されるhttp://www.microsoft.com/hcl/

n ハードウェアとデバイスドライバとinfファイルをセットで認証する

WHQL申請

HCLに登録

ロゴの許可

Signeture交付

審査HCTテスト検証 合格

不合格

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 27

INFファイル

n INFファイルの役割n デバイスドライバのインストール補助

• ファイルのコピー• レジストリの操作

n デバイスドライバの設定や情報を補うパラメータ

n 複数のデバイスドライバの関連を示す

n デバイスドライバ自身• プリンタ・ドライバ• モデム・ドライバ

n INFファイルの位置付けn デバイスドライバの一部、または全部

n デバイスドライバの顔(表紙、ヘッダの役割)

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 28

INFファイル

n 一般的なINFファイルの種類n Windows95n WindowsNTn WindowsXPn Windows95 / 98 / Me / 2000 / XP共通 (Chicago)

n INFファイルのシンタックスn MSDNライブラリ(DDK->Device Installation)n http://msdn.microsoft.com/library/default.asp

n INFファイルのチェックn INF-CHECK (HCT)n INFCATREADY (HCT)

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 29

サードパーティーのツール

n ツールを用いた開発n Wizard型

n テンプレート型

n GUIでの操作、デバッグが可能

n ツールの例n WinDK, DriverWizard (ツールクラフト, BlueWater)n NuMega DriverStudio (CompuWare)

• DriverWorks, Driver Agent, VtoolsD, DriverWorkbench• SoftICE, BoundsChecker• TrueCoverage, TrueTime, FieldAgent

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 30

サードパーティーのツール(続き)

n SoftICEn CompuWareが提供(旧NuMega製品)

n 実質的にはドライバ業界標準のデバッグツールn 1台で、WinDbg同等の事が、高速にできる

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 31

その他有用なサイトとツール

n SysInternalsn http://www.sysinternals.com/

n OSRn http://www.osr.com/

n Walter Oneyn http://www.oneysoft.com/

n Coce Machine Trainingn http://www.codemachine.com/

n VMwaren http://www.vmware.com/n 1台でWinDbgを実行できる

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 32

日本語の参考サイト

n Windows Developer Centern http://www.microsoft.com/japan/msdn/windows/

n パソコン電脳職人道n http://www.ouk.co.jp/ogawa/sforum/sfrm.html

n デバドラ掲示板n http://www.sciencepark.co.jp:8080/bbs1/wwwboard.html

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 33

Windowsとの付き合い方n WEBを有効活用する

n Microsoftのサイト• http://www.microsoft.com/ddk/• http://www.microsoft.com/whdc/• http://www.microsoft.com/whdc/DevTools/HCTKit.mspx

n その他のサイト• 掲示板と個人の情報サイト(質問してみることも…)

n MSDNは必須だが...n ライブラリの情報(初心者にはあまり意味が無いが…)n HELPはDDKのHelpを使うべきn ユニバーサル(輸出するならば)n オンライン配布(Subscriber Download)の利用が当たり前n MSDNは万全ではない

n Vistaに向けた準備

2005/9/14 Device Drivers Limited デバイスドライバ開発技術者セミナー 34

Windowsとの付き合い方(続き)

n 困った時にはn Mail, Teln 他メーカをうまく利用(OEMが最優先!?)

n インターネットn MS, MSDNのサポートをうまく利用するn そして… デバイ

スドライバ技術者