20楼#
发布于:2004-10-19 00:48
1。对于软的驱动程序来说,虽然它并不针对任何一个硬件,但是系统会在安装的时候创建相应的设备节点(ROOT Bus devnode, under HKLM\System\CurrentControlSet\Enum\Root\Legacy_xxx)。在系统启动时,将会生成PDO并调用AddDevice。请参考Walter Oney "Programming The Windows Driver Model"第二章。
2。 (1) 那这个驱动程序是在什么时候被装载的? 请参考CreateService (2)但是什么时候才是系统需要的时候呢? Net start XXX / StartService 3。都不是。是在随机的进程中,不要认为Driver会运行在自己的进程中。上面的进程会不会被阻塞取决于你用的是同步还是异步操作。 请参考Overlapped IO (paramenter lpOverlapped) of ReadFile and DeviceIoControl. 4。驱动程序的代码在整个系统中只有一份,但是对于每一个PDO都有一个对应的DeviceExtension,因为每个设备实例都会调用AddDevice,并创建一份DeviceExtension,可以想象成C++的实例化。全局变量将会被共享 |
|
21楼#
发布于:2004-10-18 19:55
建议搂主仔细的看看ddk的toaster例子(包括function driver和bus driver) 好,仔细看看。 |
|
22楼#
发布于:2004-10-18 14:55
建议搂主仔细的看看ddk的toaster例子(包括function driver和bus driver)
如果你把这个例子搞懂了,就不会再问上边的问题了。 |
|
23楼#
发布于:2004-10-18 09:15
放在DeviceExtension里是不可分页的,而且你可以通过DISPATCH的DEVICEOBJECT来获得该地址,访问里面的东西,全局变量可以放在外面和RING3的一样,而且在X86下全局变量的东西本身也是不可分页.
|
|
|
24楼#
发布于:2004-10-17 10:09
1.2:我的理解是:驱动程序在启动时(注册表中services中的start决定操作系统何时启动驱动程序,也可以在用户程序调用setup*函数启动驱动程序),支持完全PNP的驱动会由PNP管理器自动调用位于DeviceObject->DeviceExtension->AddDevice函数。对于非完全PNP驱动,AddDevice的功能在DriverEntry中实现。所以可以看到在很多NT驱动程序中并没有AddDevice函数。 如果如你所说,PNP管理器在调用AddDevice时,其参数中的PDO应该是指向什么设备对象呢? 如果全局变量放在DeviceExtension里,对于同一个驱动程序管理下的不同的设备,会有不同的值。如果需要它们具有相同的值的话,那是不是应该放在外面呢?对于声明为static的变量是不是对不同的设备具有相同的值呢? |
|
25楼#
发布于:2004-10-16 12:58
1.2:我的理解是:驱动程序在启动时(注册表中services中的start决定操作系统何时启动驱动程序,也可以在用户程序调用setup*函数启动驱动程序),支持完全PNP的驱动会由PNP管理器自动调用位于DeviceObject->DeviceExtension->AddDevice函数。对于非完全PNP驱动,AddDevice的功能在DriverEntry中实现。所以可以看到在很多NT驱动程序中并没有AddDevice函数。
3:我想是前者,但这个问题弄的不是很透彻,哪位出来说说? 4:一般是这样的,通常驱动所用的全局变量放在DevcieExtension中,而且必须同步操作。 |
|
26楼#
发布于:2004-10-16 11:18
怎么没有人关注?
神呀,帮帮我吧。 |
|
27楼#
发布于:2004-10-16 09:19
顶,我和你一样。
|
|
上一页
下一页