GomeNasai
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2006-06-01
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1350回复:6

初学者的问题

楼主#
更多 发布于:2003-07-15 08:21
最近开始学WDM驱动程序编程,有很多基本概念(或工作过程)不太清楚。感到很难继续往下学,手头上的参考书对这方面都很少说明(也许是我太笨了,这种问题根本不用说明),只好在这里请教各位大侠了。
1.WDM支持PnP,也就是说当一个外设插到电脑端口上时,电脑会检查到并利用*.inf寻找对应的驱动程序.那么是不是说要想实现PnP,实际上,WDM对外设是有要求的,即要求它上电后能够与WDM下的底层(与硬件打交道)的驱动程序进行通讯,提供*.inf的名称以供系统查找?
2.如果上述猜测对的话,那么如果插入的是一个不具备上述功能的外设的话,是不是就必须通过手工方式启动添加外设?
3.如果2是对的话,那么每次插入外设是不是都需要重新添加呢?能否自动启动呢?
4.在使用RS232时,可以通过指定COM1,COM2来指定具体端口。那么,如果是使用USB,对于3.的情形系统怎么能知道你要用的是两个(或四个)端口中的哪一个呢?
对不起,提的问题很多,各位大虾又很忙,如果没时间具体回答,告诉一下是或不是也可。
谢谢。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-16 13:03
1、2、3看不懂你说的是什么,但你要明白,如果一个硬件要实现pnp,它必须符合pnp的要求。比如PCI设备,就有PCI的spec来定义了如何实现pnp,如果你的硬件不符合这个spec,没有办法搞定。

4. CreateFile的第一个参数
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
GomeNasai
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2006-06-01
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-17 08:20
谢谢回复。
对于1,2,3的问题,您回答了一半。我的另一半的意思是说如果插上了一个不满足PnP的外部设备(或硬件),是根本无法使用(也就是说WDM对外部设备或硬件的接口约定是有要求的)呢还是每次都要手工安装驱动程序,从您的回复来看似忽是WDM对外部设备或硬件的接口约定是有要求的。就是说在设计外部设备或硬件的接口时需要用某种方法让Windows知道并告诉windows系统它的*.inf文件的名字了。不知理解的对不。
对于问题4。也许是我对USB还不懂,所以问得外行了。我想问的是,对于RS232,明确规定了COM1,COM2,用CreateFile()可以明确指定使用哪一个,但USB外部表现也是两个或四个端口,却没有明确指定......。喔,是不是说,USB在内部只有一个地址呢?
谢谢。
testing
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2003-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-17 09:29
1> 1,2,3的问题,对于一个PNP设备,当插入系统时,WINDOWS会
通过读写该设备的某些存储区域或register(由协议规定)而知
道该设备的VendorID和ProductID,Windows正是根据这两个参数
去搜索inf文件的,如果搜索不到,Windows会让用户来指定。
对于一个非PNP的设备,需要手工安装驱动程序。
2> 4的问题:这个取决于你的DRIVER的设计啊,比如你有四个
PIPE,你可以指定PIPE0,PIPE1,PIPE2,PIPE3,然后你可以
像打开COM1,COM2一样打开这些PIPE,前提是你的DRIVER中
createdevice时做过相应的Symbolic Link,如果没有,你得在前面
自己加上你的device的registry路径
GomeNasai
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2006-06-01
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-17 10:53
谢谢指教。明白了不少。
但对于“前提是你的DRIVER中createdevice时做过相应的Symbolic Link”是不是指在createdevice时要指定具体的物理地址(或与其相关联的设备名)呢?(也就是说在这种情况下,只能使用某一固定端口)。比如COM1,COM2都是与具体的物理地址相关联的。
testing
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2003-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-17 13:17
不是物理地址,是将一个符号名称与一个device object联系起来,
这样,当你做过symbolic link后,你再使用createfile打开一个
符号名称时,操作系统就知道你要打开的是某个关联的设备对象,
这个设备对象本身携带的信息表明了它是什么设备,比如USB或
串口,以及该设备对象的其它相关信息,比如I/O地址等
GomeNasai
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2006-06-01
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-17 14:37
非常感谢。大体上明白了。
游客

返回顶部