5

私は自分で Windows デバイス ドライバーを勉強していますが、PDO と FDO を区別するのは非常に難しいと感じています。私が間違っている場合は、私が頭の中に持っている流れを教えてください!!

システムの起動時に、FDO を作成するルート バス ドライバーが読み込まれます。これで、子デバイスが列挙され、バス ドライバーのホット プラグ メソッドが呼び出され、新しい子デバイスが検出され、そのメソッドが PNP マネージャーに通知されると思います。PNP マネージャーは、ルート バス ドライバーの AddDevice() ルーチンを呼び出し、PCI などの新しいバスの PDO をインターンで作成します。全体の流れを詳しく説明してください。これは単なる私の想像です。そして、システムが FDO を作成する PCI バスの機能ドライバーをロードすることが文書化されています ?? このFDOは何ですか?? そして、なぜ私はそれが必要なのですか?? 私によると、PCIバスドライバーもルートバスと同じように、その子を列挙してそれらのPDOを作成する必要があります。または、このFDOはPDOのみを意味します?? 私はとても混乱しています:( !!

4

3 に答える 3

13

あなたは実際に何をしていますか、それとも単に学ぼうとしているだけですか? どうやってスタックのこの下に落ちたのだろうと思っています。

PDO = 物理デバイス オブジェクト

FDO = 機能デバイス オブジェクト

PDOは物理デバイスとして機能しますが、必ずしも物理デバイスである必要はありません。基本的には、バス上のデバイスとバス自体の間のインターフェイスです。これは、MSDN で十分にカバーされています。

これは USB スティックを使用する例で、これは違いをよく示しています。

ここに、より詳細な説明と重要な引用があります

参照ポイントが PCI バスである場合、Pci.sys がファンクション ドライバーです。しかし、参照ポイントが Proseware Gizmo デバイスである場合、Pci.sys はバス ドライバーです。この二重の役割は、PnP デバイス ツリーでは一般的です。バスのファンクション ドライバーとして機能するドライバーは、バスの子デバイスのバス ドライバーとしても機能します。

また、PDO と FDO の間に座って、ファイルの非表示、POC ルートキットなどのいたずらを開始できるフィルター ドライバーもあります。この段階で、追加の機能を追加したり、PDO へのアクセスを完全に防止したりできます。

そして、ここにすべての MSDN リンクがあります。

http://msdn.microsoft.com/en-us/library/windows/hardware/hh439632(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/ ff554721(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/hh439643(v=vs.85).aspx http://msdn.microsoft.com/ en-us/library/windows/hardware/ff554731(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/ff564859(v=v=vs.85).aspx http://technet.microsoft.com/en-us/library/cc776371(v=ws.10).aspx

それでも問題が解決しない場合は、お気軽に投稿してください。

于 2013-10-01T10:31:13.370 に答える
4

Windows ドライバー モデルでのデバイス オブジェクトとドライバーの階層化。

「Microsoft Windows ドライバー モデルのプログラミング」、第 2 版、Walter One の抜粋フォームを次に示します。

- PDO stands for physical device object. The bus driver uses this
   object to represent the connection between the device and  the bus. 
    
 - FDO stands for function device object. The function driver uses
   this object to manage the functionality of the device.   
 - FiDO stands
   for filter device object. A filter driver uses this object as a place
   to store the information it needs to keep  about the hardware and its
   filtering activities. (The early beta releases of the Windows 2000
   DDK used the term FiDO,  and I adopted it then. The DDK no longer
   uses this term because, I guess, it was considered too frivolous.)

これがお役に立てば幸いです。

于 2014-01-21T08:46:20.163 に答える