dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1766回复:6

请教驱动程序更新的问题

楼主#
更多 发布于:2005-01-19 14:18
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
难道更新驱动导致的蓝屏 是驱动的问题?

请大家帮忙看看.谢谢
还是我
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-19 14:28
你可以看看ddk中的安装驱动的sample,然后修改为自己需要的
这样你可以通过Install Shield来调用(exe或dll都可以)。
具体可看看2K中的
NTDDK\\src\\general\\setup\\install下的代码。
当然XP也有
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
难道更新驱动导致的蓝屏 是驱动的问题?

请大家帮忙看看.谢谢
 
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-19 14:37
谢谢AllenZh的回答.
我本来就是想按照你的那个想法做的.
后来发现,利用系统自己带的newdev.dll完全可以实现,因为它里边封装了UpdateDriverForPlugAndPlayDevices这个函数了.
而且我确实是在xp下 sp1,sp2 测试通过,成功了.
只是不知道为何2000下不可以:-(
确切的说: 在我的开发机器上是可以的(win2k sp4)
但是到了别的机器就会蓝屏,实在是ft和苦恼的很:(
还是我
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-20 10:13
在设备管理器中可以手动更新驱动成功的话,是不是就说明驱动没有问题?
可是为什么用UpdateDriverForPlugAndPlayDevices()会得到不确定的结果?
xp可以2000不一定可以.
某台机器的2000可以,另外的一台机器却不可以.
会是什么原因呢?

顺便请教大家,你们的设备驱动更新用installshield是如何实现的?

Thanks in advance
还是我
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-20 10:41
你的这个情况(在自己电脑上可以,别人电脑上不行)跟我以前碰到的情况类似。
首先多试几台电脑,尤其注意service pack的版本。要是2K的话,最好都升到sp4
其次,如果还出现类似的情况,那几乎可以肯定的是自己的驱动的问题。用driver verifier测试你的驱动。这个测试很严格,但是也很普遍。一定要通过。如果不能通过,那肯定就是自己的驱动问题。按照你所说的
---------
蓝屏信息:
driver_irql_not_less_or_equal.---- mydriver.sys
难道更新驱动导致的蓝屏 是驱动的问题?
---------
应该是aquire spinlock或其他raise irql的时候保存原来的变量可能出问题了。

看我写这么多,别忘了给分呀。
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-20 15:59
谢谢acidfish的回答.
(1)对客户来说,不能保证他们的系统都是安装了ServicePack4的啊:-(
所以很想知道一个通用的解决方案.
mean 2000 2000sp1 2000sp2 2000sp3 2000sp4 xp xpsp1 xpsp2
(2)
驱动方面应该没有问题,因为我们的驱动都是通过了WHQL了的.
btw,如果有问题,会是旧的驱动引起的还是要更新的新的驱动引起的呢?

你的qq是多少?加我吧 271144583.

顺放分给两位大侠.以表谢意.
还是我
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-20 16:21
有时候必须要求客户升级补丁。比如我上边举的例子是一个基于USB2.0的驱动。windows2000在sp4以前都不能很好的支持USB2.0。在sp4里边才把那些bug修改了。这些都是M$网站说明的。所以我那个产品里边就明确要求客户打上sp4的补丁。当然你这个情况并不知道是否是sp的问题。

你的这个情况最好使用调试工具看一下。比如windbg
多试几种测试方案,比如你一直用新的驱动更换老的驱动。你换种方法,用老的驱动更新老的驱动,或者用新的驱动更新新的驱动。或者干脆用一个WDM驱动框架替换原来的驱动。看看还会不会发生这种现象。
游客

返回顶部