阅读:1099回复:4
第一次动手写driver的一点问题。
初学驱动开发,看了两本书了,现在想把以前在用户模下实现在一些东西放到内核里来。以前写过一个智能仪表的程序,硬件主要是PC104+几个亚当模块和传感器。主机和模块是通过485总线联接,以前都是通过用createfile,readfile,writefile,读写串口实现的,现在我想把对模块的读写部分从应用程序独立出来放到内核里去,这样的功能应该用WDM实现吗?我总觉得WDM是PnP的一种,而这个设备不是那种技持PnP的,我是不是可以完全忽略对PnP的处理,一WDM对非PnP设备到底怎样处理的?特别是没有PnP支持的时候统系怎么把物理设备和driver联系起来的?
[编辑 - 12/13/04 by wuyingwsj] |
|
沙发#
发布于:2004-12-13 17:27
WDM驱动是PNP驱动的一种,WDM必须处理PNP例程和POWER例程。
|
|
|
板凳#
发布于:2004-12-13 17:31
写WDM和其它模式驱动程序基本上是相同的,代码中的主要区别在于如何创建设备。在WDM驱动程序中,即插即用(PnP)管理器告知何时向系统添加一个设备,或者从系统删除设备。PnP管理器使用安装的INF文件查找新设备的正确驱动程序;而其它模式驱动程序必须发现它自己的设备,使用专门的安装程序安装。
另外在细节上也存在很多区别,其它模式驱动程序参数一般由注册表提供,在DriverEntry里调用读注册表的函数,然后根据注册表再调用CreateDevice,但是WDM一般不是这样,这是由于Windows 2000下支持PnP,在加载的时候会发PnP消息给Driver,所以一般不需要在DriverEntry里调用CreateDevice,而是在AddDevice里创建,或者在PnP消息里创建。一般在DriverEntry里创建的是一个与设备或者对象毫无关系的虚拟设备,用于管理与Win32的通讯。如果不想对该设备做什么特别的处理,或者设备不复杂,AddDevice可以简单返回Nt_Success,不用调用CreateDevice。另外整个设备驱动树也发生了改变,从而使安装程序发生了很大的改变。 |
|
|
地板#
发布于:2004-12-13 20:15
WDM驱动是PNP驱动的一种,WDM必须处理PNP例程和POWER例程。 fslife谢谢你回答. 别外PnP管理器应该是在设备上电的时候向驱动程序发送PnP消息吧。对于非PnP设备我想PnP管理器应该不能及时识别设备是连接上主机吧,那他怎么能管理这种非PnP设备呢? |
|
地下室#
发布于:2004-12-13 20:21
我一在想知道几个问题:
1、WDM能不能支持这种不支持PNP的设备,我好想记得是支持的。 2、如果支持PnP管理器是怎么发现这个设备并把设备和驱动程序联接起来的,是通过配置文件和注册表吗? [编辑 - 12/13/04 by wuyingwsj] |
|