20楼#
发布于:2005-03-22 13:13
1.PnP管理器为每个设备实例调用AddDevice routine,如果有设备的,首先要在inf文件里面指定加载的设备,如果一个设备也没有的话,嘿嘿,就像filter driver,你总要加到某个driver上去吧,所以AddDevice总会被调用的,才能生成设备栈,这样才符合WDM的构架。
2.何时load driver,由inf文件的start type来决定,如3,就是booting windows时候加载driver,如果为1,就是由自己的用户程序使用到driver的时候,来加载它,当然要有管理员的权限,通过CreateService,StartSerive来实现动态安装driver,其实就是交给system.exe来实现。 3.内核模式的例程运行在下面三种不同的上下文之一: - 系统进程上下文 - 特定用户线程(和进程)上下文 - 任意用户线程(和进程)上下文 一个驱动程序的DriverEntry(…)函数总是运行在系统进程的上下文中,系统进程上下文和用户上下文无关(因此没有TEB)。DPCs(例如一个驱动程序为ISR服务的DPC或者定时器到期函数)运行在任意用户线程的上下文中。这意味者在一个DPC的执行过程中,任何用户线程都可以成为“当前”线程,因此任何用户进程都可以映射到内核虚拟地址空间的低2GB中。当一个设备直接被用户访问而不涉及其他驱动程序时,该设备的驱动程序的分派线程总是运行在发出请求的用户线程中。 4.DriverEntry只会被调用一次,AddDevice可以被多个设备调用,so,DeviceExterntion对应每一个设备。全局变量只有一个,so,必须作互斥访问。 以上只是个人理解,可能有不对的地方,还请高人指教。 |
|
|
21楼#
发布于:2005-03-22 18:46
1.PnP管理器为每个设备实例调用AddDevice routine,如果有设备的,首先要在inf文件里面指定加载的设备,如果一个设备也没有的话,嘿嘿,就像filter driver,你总要加到某个driver上去吧,所以AddDevice总会被调用的,才能生成设备栈,这样才符合WDM的构架。 好,要的就是你这样的回答。 但是对于第二个问题,可能是我没有表达清楚,还有一个重点的小问题在里面:由于是在AddDevice里调用IoRegisterDeviceInterface的,而AddDevice是在DriverEntry以后才会被调用,而这个DeviceInterface是提供给就用程序的,就用程序只有找到该DeviceInterface后才能启动驱动程序(我们暂时不说在系统启动时加载的那种类型),这样才能调用DriverEntry,再调用AddDevice,再调用IoRegisterDeviceInterface,那这个不就是一个鸡生蛋,蛋生鸡的问题了吗? |
|
22楼#
发布于:2005-03-22 22:32
驱动程序不是由应用程序启动的。DeviceInterface只是用来获得访问驱动程序所创建设备对象的句柄而已,它与驱动程序的启动无关。 关于驱动程序的启动,可以参看ddk文档,里面有比较详尽的解说。 |
|
|
23楼#
发布于:2005-03-23 11:57
[quote]1.PnP管理器为每个设备实例调用AddDevice routine,如果有设备的,首先要在inf文件里面指定加载的设备,如果一个设备也没有的话,嘿嘿,就像filter driver,你总要加到某个driver上去吧,所以AddDevice总会被调用的,才能生成设备栈,这样才符合WDM的构架。 好,要的就是你这样的回答。 但是对于第二个问题,可能是我没有表达清楚,还有一个重点的小问题在里面:由于是在AddDevice里调用IoRegisterDeviceInterface的,而AddDevice是在DriverEntry以后才会被调用,而这个DeviceInterface是提供给就用程序的,就用程序只有找到该DeviceInterface后才能启动驱动程序(我们暂时不说在系统启动时加载的那种类型),这样才能调用DriverEntry,再调用AddDevice,再调用IoRegisterDeviceInterface,那这个不就是一个鸡生蛋,蛋生鸡的问题了吗? [/quote] DriverEntry 和AddDevice的调用由PnP management来掌控。 哥们,请给分阿,嘿嘿。 |
|
|
24楼#
发布于:2005-03-23 13:15
关键是一个先与后的问题呀,
应用程序总得要有接口才能通知PNP管理器调用DriverEntry, 但是在AddDevice里接口才被注册, 而在DriverEntry里才能通知到PNP管理器AddDevice的地址, 这样的话,刚开始的时候,应用程序怎么知道接口在哪呢? |
|
25楼#
发布于:2007-06-13 14:30
跟帖做个记号,以后好找
|
|
26楼#
发布于:2010-04-16 09:28
mark~
|
|
27楼#
发布于:2010-04-26 21:15
要看书啊!!
|
|
|
上一页
下一页