chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1496回复:8

为什么我的硬件已经不在系统了,驱动程序还照样显示在“设备管理器”里呢?

楼主#
更多 发布于:2002-07-29 20:06
大家好:
    我做了个简单的isa硬件卡驱动程序,实现简单的端口访问操作。但是为什么我的驱动程序在没有硬件卡存在的情况下也能安装呢?我是这样做的:
在IRP_MN_START_DEVICE例程里检测硬件,如果检测失败就调用相关的函数:
PnpStopDevice()、IoSetDeviceInterfaceState( &dx->ifSymLinkName, FALSE)、RtlFreeUnicodeString(&dx->ifSymLinkName)、IoDetachDevice()、IoDeleteDevice(fdo)
将设备删除,但是在设备管理器仍然可以看到我的设备驱动程序,而且windows报告说“设备工作正常”,这不是怪事吗?
如果我要做到没有硬件设备时,驱动程序就不加载,设备管理器里也看不到它的踪迹,我该怎么做呢?感谢你抽时间看我的帖子,谢谢!

[编辑 -  7/29/02 by  chrys]
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-07-30 09:39
ISA的卡,你肯定是向系统报告你用的资源了。系统呢,就认为有这个东东在罗。
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-30 10:21
用户被禁言,该主题自动屏蔽!
fulminate
驱动小牛
驱动小牛
  • 注册日期2002-05-16
  • 最后登录2006-11-27
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-30 13:49
就是啊!ISA的卡不是pnp的,所以安装时不检测硬件
==========腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库==========
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-30 19:36
ISA不检查你的硬件在不在。开机就启动你的驱动程序。
最好在驱动程序地初始化中,检测硬件,如果不在,就退出。

请问我该在哪里初始化硬件呢?在DriverEntry()里吗?在这个函数里我还不能得到系统分配的资源(io地址和中断)啊?我怎么检测硬件呢?你说的退出是怎么退出呢?在哪退出?我觉得驱动程序根本没法像应用程序一样退出来啊。我在DriverEntry()试着返回别的非成功的状态,但是驱动还是照样加载了啊?我该怎么做?
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-07-31 09:03
ISA的系统不会为你分配资源啊。要自己指定或从什么地方得到。
如果你的driver当了service(应该会的啦),你把ISA卡拔了,照样被load,说有这个device。因为你没有办法自动知道ISA卡是否还在的。
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-09 13:16
其实我的意思是这样的:

我的驱动在被加载之后,驱动是可以检测出ISA硬件到底在不在,在StartDevice例程里检测。问题是,我检测到硬件不在了,那么我如何让我的驱动退出来,就是说,在设备管理器里看不到我的设备了,并且我的驱动也执行了“Unload”例程了,该怎么做呢?
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
jr1017
驱动牛犊
驱动牛犊
  • 注册日期2002-04-26
  • 最后登录2007-07-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-11 15:41
我也有同样的问题,现在你有什么思路没?
沧海一栗
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-11 23:35
我觉得是不是可以认为删除创建的设备,然后手工调用unload,执行停止操作
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
游客

返回顶部