xqchen
驱动牛犊
驱动牛犊
  • 注册日期2001-09-07
  • 最后登录2004-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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++的实例化。全局变量将会被共享
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2004-10-18 19:55
建议搂主仔细的看看ddk的toaster例子(包括function driver和bus driver)
如果你把这个例子搞懂了,就不会再问上边的问题了。
 


好,仔细看看。
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2004-10-18 14:55
建议搂主仔细的看看ddk的toaster例子(包括function driver和bus driver)
如果你把这个例子搞懂了,就不会再问上边的问题了。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
23楼#
发布于:2004-10-18 09:15
放在DeviceExtension里是不可分页的,而且你可以通过DISPATCH的DEVICEOBJECT来获得该地址,访问里面的东西,全局变量可以放在外面和RING3的一样,而且在X86下全局变量的东西本身也是不可分页.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2004-10-17 10:09
1.2:我的理解是:驱动程序在启动时(注册表中services中的start决定操作系统何时启动驱动程序,也可以在用户程序调用setup*函数启动驱动程序),支持完全PNP的驱动会由PNP管理器自动调用位于DeviceObject->DeviceExtension->AddDevice函数。对于非完全PNP驱动,AddDevice的功能在DriverEntry中实现。所以可以看到在很多NT驱动程序中并没有AddDevice函数。
3:我想是前者,但这个问题弄的不是很透彻,哪位出来说说?
4:一般是这样的,通常驱动所用的全局变量放在DevcieExtension中,而且必须同步操作。


如果如你所说,PNP管理器在调用AddDevice时,其参数中的PDO应该是指向什么设备对象呢?
如果全局变量放在DeviceExtension里,对于同一个驱动程序管理下的不同的设备,会有不同的值。如果需要它们具有相同的值的话,那是不是应该放在外面呢?对于声明为static的变量是不是对不同的设备具有相同的值呢?
histogram
驱动牛犊
驱动牛犊
  • 注册日期2004-08-28
  • 最后登录2006-09-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2004-10-16 12:58
1.2:我的理解是:驱动程序在启动时(注册表中services中的start决定操作系统何时启动驱动程序,也可以在用户程序调用setup*函数启动驱动程序),支持完全PNP的驱动会由PNP管理器自动调用位于DeviceObject->DeviceExtension->AddDevice函数。对于非完全PNP驱动,AddDevice的功能在DriverEntry中实现。所以可以看到在很多NT驱动程序中并没有AddDevice函数。
3:我想是前者,但这个问题弄的不是很透彻,哪位出来说说?
4:一般是这样的,通常驱动所用的全局变量放在DevcieExtension中,而且必须同步操作。
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2004-10-16 11:18
怎么没有人关注?
神呀,帮帮我吧。
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2004-10-16 09:19
顶,我和你一样。
上一页 下一页
游客

返回顶部