阅读:1766回复:6
请教驱动程序更新的问题
OS:win2k 和 xp.
在设备管理器中,右键,属性,driver,update driver,specify a location,然后我们通过指定的inf和sys来更新设备的驱动. 这个过程 如何通过编程来模拟? 期间系统都是调用哪些函数了? 是不是只有一个UpdateDriverForPlugAndPlayDevices()? 我的问题是:现在我通过上述的方式可以更新驱动,用我的inf和sys. 现在 我要在驱动的安装程序中来实现这个过程,就是把设备一直插在电脑上,通过安装程序来完成驱动的升级. 解决方案: install shield9. if( UseDLL ( "NEWDEV.DLL" ) = 0 ) then bResult = UpdateDriverForPlugAndPlayDevicesA( 0, // No Window Handle ptrHardwareId, // Hardware ID ptrFullInfPath, // FileName 1, NULL) ; UnUseDLL ( "NEWDEV.DLL" ) ; endif; 大体就是这个样子.利用系统中的newdev.dll来调用UpdateDriverForPlugAndPlayDevicesA(),从而实现给设备更新驱动. 但是为什么在xp下可以,2k下却会蓝屏? 蓝屏信息: driver_irql_not_less_or_equal.---- mydriver.sys 难道更新驱动导致的蓝屏 是驱动的问题? 请大家帮忙看看.谢谢 |
|
|
沙发#
发布于:2005-01-19 14:28
你可以看看ddk中的安装驱动的sample,然后修改为自己需要的
这样你可以通过Install Shield来调用(exe或dll都可以)。 具体可看看2K中的 NTDDK\\src\\general\\setup\\install下的代码。 当然XP也有 OS:win2k 和 xp. |
|
|
板凳#
发布于:2005-01-19 14:37
谢谢AllenZh的回答.
我本来就是想按照你的那个想法做的. 后来发现,利用系统自己带的newdev.dll完全可以实现,因为它里边封装了UpdateDriverForPlugAndPlayDevices这个函数了. 而且我确实是在xp下 sp1,sp2 测试通过,成功了. 只是不知道为何2000下不可以:-( 确切的说: 在我的开发机器上是可以的(win2k sp4) 但是到了别的机器就会蓝屏,实在是ft和苦恼的很:( |
|
|
地板#
发布于:2005-01-20 10:13
在设备管理器中可以手动更新驱动成功的话,是不是就说明驱动没有问题?
可是为什么用UpdateDriverForPlugAndPlayDevices()会得到不确定的结果? xp可以2000不一定可以. 某台机器的2000可以,另外的一台机器却不可以. 会是什么原因呢? 顺便请教大家,你们的设备驱动更新用installshield是如何实现的? Thanks in advance |
|
|
地下室#
发布于:2005-01-20 10:41
你的这个情况(在自己电脑上可以,别人电脑上不行)跟我以前碰到的情况类似。
首先多试几台电脑,尤其注意service pack的版本。要是2K的话,最好都升到sp4 其次,如果还出现类似的情况,那几乎可以肯定的是自己的驱动的问题。用driver verifier测试你的驱动。这个测试很严格,但是也很普遍。一定要通过。如果不能通过,那肯定就是自己的驱动问题。按照你所说的 --------- 蓝屏信息: driver_irql_not_less_or_equal.---- mydriver.sys 难道更新驱动导致的蓝屏 是驱动的问题? --------- 应该是aquire spinlock或其他raise irql的时候保存原来的变量可能出问题了。 看我写这么多,别忘了给分呀。 |
|
5楼#
发布于:2005-01-20 15:59
谢谢acidfish的回答.
(1)对客户来说,不能保证他们的系统都是安装了ServicePack4的啊:-( 所以很想知道一个通用的解决方案. mean 2000 2000sp1 2000sp2 2000sp3 2000sp4 xp xpsp1 xpsp2 (2) 驱动方面应该没有问题,因为我们的驱动都是通过了WHQL了的. btw,如果有问题,会是旧的驱动引起的还是要更新的新的驱动引起的呢? 你的qq是多少?加我吧 271144583. 顺放分给两位大侠.以表谢意. |
|
|
6楼#
发布于:2005-01-20 16:21
有时候必须要求客户升级补丁。比如我上边举的例子是一个基于USB2.0的驱动。windows2000在sp4以前都不能很好的支持USB2.0。在sp4里边才把那些bug修改了。这些都是M$网站说明的。所以我那个产品里边就明确要求客户打上sp4的补丁。当然你这个情况并不知道是否是sp的问题。
你的这个情况最好使用调试工具看一下。比如windbg 多试几种测试方案,比如你一直用新的驱动更换老的驱动。你换种方法,用老的驱动更新老的驱动,或者用新的驱动更新新的驱动。或者干脆用一个WDM驱动框架替换原来的驱动。看看还会不会发生这种现象。 |
|