LoginSignup
0
1

More than 3 years have passed since last update.

Windowsデバイスドライバプログラミング 勉強記録1

Last updated at Posted at 2021-02-06

※本記事は勉強しつつ書いていますので、不正確な情報が含まれる可能性がありますので予めご了承ください。

テキスト

書籍

Windows Vistaデバイスドライバプログラミング
この書籍をメインでやりつつ、下記のページで補足参照しながら進める予定。
以下、「テキスト」と書いた場合、本書籍を指す。

51REA+ahW+L._SX392_BO1,204,203,200_.jpg

Windows Vista版であるが、Window10でも使用できるみたい。
逆にWindows XP版の書籍の場合は、Vistaから取り入れられた新しいフレームワークに対応できない。
日本語の類書でWindows10のものはみあたらなかった。

Webページ
誰でもわかるデバイスドライバ講座

勉強の流れ

〇WDMの基本、環境構築
WDM(Windows Driver Model): WindowsXPからある従来のドライバモデル(フレームワーク)。Windows98はフレームワークが異なった。
↓ 
〇USBストレージデバイスの使用
書籍ではUSBのドライバの事例として扱っている

〇マイクロソフトのサンプルプログラムを読んでみる
もしかしたら前倒しするかもしれないです。実際にサンプルを読んで、出来たら動作やコードを修正してみたりして
より深い理解につなげたい。
↓ 
〇KMDFの基本

〇KMDFの基本
KMDF(Kernel Mode Driver Model Framework): WDMを使いやすく定型処理をライブラリとしてより高度な機能を提供するフレームワーク
イメージとしてはWin32 APIに対するMFCのような認識。

〇UMDFの基本
UMDF(User Mode Driver Model Framework): 実際のデバイス制御をおこなうカーネル部と通信を行うことにより機能を実現する、ユーザモードのフレームワーク

〇実践(未定)

デバイスドライバの定義

デバイスドライバはアプリケーションに抽象化したインタフェースを提供する。
デバイスドライバはOSに定められた関数の仕様(インタフェース)に基づき、各デバイスを制御する実際の機能を実装するソフト

[?]OSがオブジェクト指向でいう抽象クラス(インタフェース)を定めて、それを継承して実際の機能の実態をデバイスドライバが
実装している感じか?

ソフトウェアの階層構造

C言語のgetchar()の例

-----------------
[アプリケーション] 
getchar()呼び出し
-----------------
[OS]標準ライブラリ
-----------------
[OS]Inputマネージャ
-----------------
[デバイスドライバ]
※各デバイスごとに
実装(キーボード等)
-----------------

デバイスドライバの階層構造

USBキーボードの例

-------------------------------
USBキーボード
ファンクションドライバ:
(上位のデバイスドライバ)
-------------------------------
USB バスドライバ
(下位のデバイスドライバ)
-------------------------------
USBコントローラ
-------------------------------
キーボード
-------------------------------

ファンクションドライバ:
データ転送など制御依頼をバスドライバに依頼する。以下の種類がある。

 ・クラスドライバ ※
  (OSと連携して動作する)

 ・ベンダードライバ ※ <= テキストで扱うのはこれ
  (OSではなく専用アプリケーションと連携)
 ※テキスト独自の用語らしい。

バスドライバ:
ファンクションドライバの依頼を受けてハードウェア(入力装置に組み込まれるコントローラ)を制御する

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1