WDM駆動モデルの概要


WDM駆動はNT駆動モデル上で進化したものであるため、本質的にはWDM駆動には大きな違いはなく、プラグアンドプレイ、電源管理などの機能をサポートする上で多くの拡張を行い、もう一言、WDF駆動モデル(UMDF、KMDF)もWDMのパッケージ化と拡張です.自分で駆動を開発するにはどのモデルを使うべきか迷うことなく、ニーズが明確になり、モデルもわかります.もちろん、ゼロから新しい駆動を作成するには、最新のWDF駆動モデルを使用することをお勧めします.
駆動をロードする場合、NT駆動は受動的にロードされ、WDMはアクティブにロードされる.NTドライバはパッシブインストール後のみ動作し、WDMドライバはデバイスが発見されたときにインストールドライバを提示します.WDM駆動は階層化されており(実際にはNT駆動も階層化されている)、1つのWDM駆動は少なくともPDOとFDOの2層(フィルタ駆動がない場合)、PDOはシステム作成があり、正確にはバス駆動作成である.
1.WDMの駆動区分
(1)BUS DRIVER(バス駆動)バス駆動はIOとカチャに直接対面する.サブデバイスのアクセスすなわちBUS上のデバイスを列挙することを検出し、またPNPの要求にも応答する.(2)FUNCTION DRIVER(機能駆動)これは駆動の主な部分であり、主に機能を実現する部分である.設備に対して読み書き操作と電源管理を行う.(3)FILTER DRIVER(フィルタ駆動)は、IRP要求のフィルタ配布と加工である.
2.WDM駆動モデルの論理関係
   
↓
      (   ,    )
↓
FDO(   )
↓
      (   ,    )
↓
PDO(   )

下位レベルの上位デバイスオブジェクトを探す:下位デバイスオブジェクトのAttachedDeviceを通じて上位デバイスオブジェクトを探す:カスタムデバイス拡張を通じて、下位デバイスオブジェクトを指す
複数の同類設備がある場合、FDOとPDOは別々に作成され(フィルタ駆動があれば一括して作成される)、水平デバイス間ではNextDeviceが空になるまでNextDeviceが指す次のデバイスが使用されます.(NULL).たとえば同じ型番のNICを2枚挿入します.最初のNICを挿入すると、PDOが作成され、対応するFDOがロードされ、2番目のNICを挿入すると、別のPDOが作成され、対応するFDOがロードされます.この2つのPDOの間には同じ水平階層があり、この2つのFDOも同じ水平階層にあります.
3.コードフレームワークとNT駆動の変化
(1)デバイス作成はNTドライバと異なり,NTドライバは一旦ロードされるとデバイスを作成するが,WDMドライバはオペレーティングシステムがPDOをロードした後,ドライバのAddDeviceルーチンを呼び出し,AddDeviceルーチンにFDOを作成し,PDOに付加する.
(2)機器アンインストール機器アンインストールは独立した派遣関数で完了し、派遣関数はIRP_MN_REMOVE_DEVICEであり、中から機器を削除すればよい、PDOから付加を解除するなど、PDOはシステムが自動的にクリーンアップしているので、プログラマーは気にしない.そのため、DriverUnload関数には何の問題もない.