fanzi
驱动小牛
驱动小牛
  • 注册日期2004-12-09
  • 最后登录2013-12-19
  • 粉丝1
  • 关注0
  • 积分1004分
  • 威望754点
  • 贡献值0点
  • 好评度93点
  • 原创分0分
  • 专家分0分
阅读:1112回复:5

请教有关AddDevice

楼主#
更多 发布于:2005-03-11 11:51
请问 NTSTATUS Wdm1AddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT pdo)
里面我感觉 DriverObject 和 pdo 好像是一个东西,谁能给我讲讲联系和区别,多谢
张帆的内核学习论坛 http://bbs.kerneldev.com
aiwadgj
驱动老牛
驱动老牛
  • 注册日期2004-11-13
  • 最后登录2020-12-24
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望84点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-03-11 11:55
请问 NTSTATUS Wdm1AddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT pdo)
里面我感觉 DriverObject 和 pdo 好像是一个东西,谁能给我讲讲联系和区别,多谢


不是的,,pdo是设备对应的总线驱动创建的物理设备的抽象。。

DriverObject是你对应的功能驱动的抽象对象。。。

系统为他上面的每个资源都创建对象,,便于管理的。。

 :P
酒也在沉溺,何时麻醉我抑郁。过去了的一切会平息。。。。。。。
fanzi
驱动小牛
驱动小牛
  • 注册日期2004-12-09
  • 最后登录2013-12-19
  • 粉丝1
  • 关注0
  • 积分1004分
  • 威望754点
  • 贡献值0点
  • 好评度93点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-11 14:12
多谢aiwadgj兄的指点,可是我概念还是有点模糊
你说DriverObject是对应的功能驱动的抽象对象
那不是FDO吗?在AddDevice中还要声明一个PDEVICE_OBJECT fdo;
然后IoCreateDevice中还要用到fdo,如
status = IoCreateDevice (DriverObject,
sizeof(WDM1_DEVICE_EXTENSION),
NULL, // No Name
FILE_DEVICE_UNKNOWN,
0,
FALSE, // Not exclusive
&fdo);
我说一下我对fdo和pdo的认识,感觉windows在最开始安装在电脑的时候会搜索硬件的基本信息,首先创立一个总线pdo,然后枚举总线上的设备,为每个设备创建一个pdo,windows根据驱动为这些设备创建一个正确的fdo,如果这个设备还要连接其他设备,那么这个fdo就扮演pdo的角色,枚举连在这个设备上的子设备,为每个子设备创建pdo,并通过用户提供的驱动程序,创建正确的fdo。如果还有子设备的子设备,就以此类推...就这么建立了一个堆栈,最上层是高层的驱动,下面是靠近总线的。要是从用户态调用驱动程序,则传进来一个irq,传递irq的方向和堆栈的建立方向相反,每一层传递都通过下层的实现来屏蔽自己的实现细节,这一点类似osi七层网络模型。

fdo和pdo的概念是相对的,在某一层是自己的fdo,在上一层看来就变成pdo了。

不知道我说的对不对,还要再次请教fdo,pdo,DriverObject三者的联系区别,谢谢
张帆的内核学习论坛 http://bbs.kerneldev.com
xbzjackey
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望34点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-11 14:57
DriverObject是驱动对象,PDO和FDO才是设备对象。
回答好的不要忘了给分哦。。。
aiwadgj
驱动老牛
驱动老牛
  • 注册日期2004-11-13
  • 最后登录2020-12-24
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望84点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-03-11 15:07
基本上就是你理解的那个样子吧。。。具体的说枚举总线设备的是总线驱动程序。。他们创建设备的pdo,之后加载设备的功能驱动与过滤驱动。。相应的的驱动创建各自响应的对象。。

驱动对象,,跟设备对象是不同的数据结构的。。这个你应该知道的,

而那些所谓的fdo或者pdo,其实都是一种的数据结构,就是各自的域的植不同而已了,,其实这两个感念(pdo与fdo)就是相对的概念。。。

[编辑 -  3/11/05 by  aiwadgj]
酒也在沉溺,何时麻醉我抑郁。过去了的一切会平息。。。。。。。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-11 15:11
DriverObject对象指驱动对象,一个驱动程序相当于一个DriverObject。
由于一个驱动程序可以支持多个设备
pdo为物理设备对象,是pnp在枚举总线设备时为一个(注意:是一个)设备创建的
fdo是功能设备对象,具体负责这个设备的功能实现
所以一个DriverObject可以对应多个pdo和fdo
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部