stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1855回复:11

我初学驱动程序开发,有一些问题想请教各位

楼主#
更多 发布于:2002-02-07 12:29
我只看过一本关于wdm驱动程序开发的书,有一些问题怎么也想不明白:
1、有一个设备连在并口上,如果你写并口上的驱动程序,怎么样把win2000系统自带的驱动程序覆盖呢?
2、你在inf文件中怎么样配置才能使系统分配端口资源给你呢?如果你要的资源与已经有的资源冲突,系统会怎么样处理呢?
3、在inf文件中,有一个硬件标识符,这只是一个随人定的标识符,也有一些是知名的标识符。书上说当即插即用设备连上计算机后,系统会根据这个标识符来判断该驱动程序是不是当前插入的设备的,系统怎么知道该标识符对应的就是该设备呢?
4、DriverEntry例程是什么时候调用的?(只在安装驱动程序时调用或每次开机驱动程序被调进来时都什么被调用)
5、AddDevice例程呢?
6、一个驱动程序可以由几个相类似的设备共享是怎么意思?怎么共享?

呵呵,我很菜。第一次来,只有这么多分。
谢谢大家啦!!

最新喜欢:

sheepoosheepo...
cquvc
驱动牛犊
驱动牛犊
  • 注册日期2002-02-01
  • 最后登录2002-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-02-07 15:46
我很想了解
KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-02-07 16:56
1.windows自带的驱动和经过认证的驱动是不让你覆盖的,系统里有一个备份,删掉的驱动会自动加上。当然,你完全可以删掉这个备份,至于后果。。。。你为什么要写并口的驱动?我看你是要写并口设备的驱动吧?
我不写驱动好多年
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-02-07 18:42
正是这样,写并口设备的驱动程序。
Over
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-02-07 23:35
1、不知道。找不到系统INF目录下包含并口的INF文件,该怎么删啊?
2、不知道。我还想知道PCI设备怎么请求资源。在AMCC5933的NVRAM中已经申请了中断5,可BIOS却自动分配了中断9,WIN2K一看中断9已经被占用了,就分配了中断11,可是显卡也使用中断11,这么共享很影响数据的接收。在INF文件里有个BASE1申请使用中断号,我设的是5,WIN2K根本不理睬。
3、PCI硬件设备的配置空间里保存着这个硬件标识符。当即插即用设备连上计算机后,PCI总线驱动程序会报告给系统,就可以判断该驱动程序是不是当前插入的设备。
4、安装或开机时调用。具体还要大虾们讲解。大概就是系统根据INF文件找到你的.SYS驱动,然后调用.SYS文件里的DriverEntry例程。安装的时候是你指定的INF文件。开机的时候是系统根据硬件信息找到对应的INF文件。
5、6我的概念还有点儿模糊。
其实这些问题书里写得都挺清楚,可离开书我就糊涂了。
还是等大虾们来回答把。
当我们仰望星空,其实是在回顾历史
KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-02-08 08:01
Chris Cant的《Writing Windows WDM Device Drivers》里面有一个详细的并口的打印机的驱动,你可以参考一下。

[编辑 -  2/8/02 作者: KungFu]
我不写驱动好多年
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-02-08 09:03
4. driverentry和c里面的main一样,都是一个程序的入口。系统加载driver的时候,必然要调用
5和6与device object有关。系统的操作都是针对device object来做的,因此,在driverentry后面,就要调用你提供的adddevice来产生一个你需要的一个device object。如果你装了2个硬盘,系统并不是拿了2个完全不同的driver来驱动它们,而是用了同一个driver,只不过这个driver产生了2个不同的device object来对应每个硬盘。系统每次要读写数据的时候就是发irp给每个对应的device object。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-02-08 11:02
最后两个问题我似乎有点明白,但是系统又怎么知道这两个硬盘对应的是一个驱动程序而不是两个呢?
sssssss
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-02-08 12:07
应该是这样!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-02-09 10:05
对于不同的硬件设备,有不同的方法。
比如usb设备,它是通过inf里面的pid和vid来匹配的。如果usb设备里面告诉系统的pid/vid和某个已知的inf里面的信息一样,就加载这个inf指定的driver。否则,系统就会提示你找到一个新设备。
但是,wdm是分层的,一个设备可以使用,常常不是只要有一个driver就可以了。比如一个硬盘,如果它是scsi的,除了要加载scsi接口的driver,还要加载通用硬盘的driver,这样才可以把这个设备当作硬盘来使用,否则它不过是个scsi设备而已。这个硬盘driver就属于class driver。因为每个class都有自己的规范,只要device遵循这些规范就可以加载对应的class driver了。

上述的一些driver的名字、名词可能不太准确。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-02-09 12:57
谢谢版主的回答。

但是对于驱动程序分层的概念我也有点模糊。这个分层是指一个设备的驱动程序被分成几层吗?还是一个系统中的所有驱动程序被分成几层呢?按版主以上的回答应该是第一种理解。但是对于一个设备来说,肯定有一个驱动程序与之对应,但一个设备又是怎么样被分成一个栈中的几层呢?我又怎么知道一个设备栈中的某一层对应实际设备中的哪一层呢?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-02-10 16:01
应该说,2种说法都适用。就拿usb设备的驱动来说吧,它是在usbd.sys上的,当一个usb设备插入计算机的时候,usbd.sys先得到通知,然后系统就会加载特定的usb client driver(就是你写的driver)。至于说usbd.sys在设备栈的哪一层,我没有看过。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部