阅读:1297回复:11
驱动开发疑问大讨论
1.如何确定某个驱动处在系统的哪一层?
2.在IoCreateDevice中,引用系统保留的设备对象和自定义的设备对象各有何意义? 3.为什么要通过IoAttachDeviceToDeviceStack来把我们的设备绑定到某个设备的设备栈的顶端?绑定和不绑定有什么不同啊? 4.FAST_IO_DISPATCH是做什么用的啊? 5.如果我不处理DriverObject->MajorFunction[...],系统会怎样? 6.如果我不处理DriverObject->FastIoDispatch,系统会怎样? |
|
沙发#
发布于:2004-11-11 12:03
建议你还是找本关于驱动程序开发的书简单的看看, 或者是看看DDK的基本文档, 至少要明白一些关于驱动程序的基本概念.
有关FAST_IO_DISPATCH可以看看IFS的文档, http://www.osr.com 上也有一篇专门关于FAST_IO_DISPATCH的文章. |
|
板凳#
发布于:2004-11-11 12:04
很多资料本站上就有, 找找看
|
|
地板#
发布于:2004-11-11 13:34
书我有,开发资料e文的很多,但看起来并不是很清楚,我在这里提问题当然是希望牛老大能直接回答啦,不然您告诉我把ddk的案例源码和文档来回分析100遍,再来论坛提问,那我还不得疯掉!希望大家能正面讨论问题本身,而不要打太极。
|
|
地下室#
发布于:2004-11-11 16:24
顶
|
|
5楼#
发布于:2004-11-11 18:10
顶
|
|
6楼#
发布于:2004-11-11 18:57
我也是新手。我的理解是:
1.如何确定某个驱动处在系统的哪一层? 不知如何确定,反正新绑定的过滤驱动总是处于设备堆栈的顶层。 而单独的驱动则视其是什么驱动而言。 2.在IoCreateDevice中,引用系统保留的设备对象和自定义的设备对象各有何意义? 没有明白问题的意思。 3.为什么要通过IoAttachDeviceToDeviceStack来把我们的设备绑定到某个设备的设备栈的顶端?绑定和不绑定有什么不同啊? 如果做过滤驱动则必须调用该函数,将你写的驱动放到设备堆栈的顶层,这样系统发给原来设备的Irp包将先发送给你的设备对象,这样就达到了过滤的目的。 4.FAST_IO_DISPATCH是做什么用的啊? 这好像是文件系统驱动才有的,主要是加快文件处理的速度。系统在进行文件系统处理时会缓存大量的文件数据,系统通过这些函数对缓存管理器进行处理,减少通过Irp包发给设备对象获取文件信息的次数。 5.如果我不处理DriverObject->MajorFunction[...],系统会怎样? 你的设备无法工作。 6.如果我不处理DriverObject->FastIoDispatch,系统会怎样? 如果写的是文件系统驱动则系统会蓝屏。因为文件系统驱动必须对这些函数处理,这是系统定义的。其他驱动好像无所谓。 |
|
7楼#
发布于:2004-11-12 09:28
非常感谢cicada的帮助,还请大家继续讨论,今天下午6点前结贴。
|
|
8楼#
发布于:2004-11-12 09:32
我也是新手。我的理解是: 虽然问题很杂,但是你回答的很出色,言简意赅。呵呵 |
|
|
9楼#
发布于:2004-11-12 11:42
加油
|
|
10楼#
发布于:2004-11-12 14:39
2.在IoCreateDevice中,引用系统保留的设备对象和自定义的设备对象各有何意义?
系统保留 0-32767 自定义 32768-65535 |
|
11楼#
发布于:2004-11-12 17:15
你自己的设备最好不要和系统重复......
|
|
|