阅读:1503回复:8
为什么我的硬件已经不在系统了,驱动程序还照样显示在“设备管理器”里呢?
大家好:
我做了个简单的isa硬件卡驱动程序,实现简单的端口访问操作。但是为什么我的驱动程序在没有硬件卡存在的情况下也能安装呢?我是这样做的: 在IRP_MN_START_DEVICE例程里检测硬件,如果检测失败就调用相关的函数: PnpStopDevice()、IoSetDeviceInterfaceState( &dx->ifSymLinkName, FALSE)、RtlFreeUnicodeString(&dx->ifSymLinkName)、IoDetachDevice()、IoDeleteDevice(fdo) 将设备删除,但是在设备管理器仍然可以看到我的设备驱动程序,而且windows报告说“设备工作正常”,这不是怪事吗? 如果我要做到没有硬件设备时,驱动程序就不加载,设备管理器里也看不到它的踪迹,我该怎么做呢?感谢你抽时间看我的帖子,谢谢! [编辑 - 7/29/02 by chrys] |
|
|
沙发#
发布于:2002-07-30 09:39
ISA的卡,你肯定是向系统报告你用的资源了。系统呢,就认为有这个东东在罗。
|
|
板凳#
发布于:2002-07-30 10:21
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2002-07-30 13:49
就是啊!ISA的卡不是pnp的,所以安装时不检测硬件
|
|
|
地下室#
发布于:2002-07-30 19:36
ISA不检查你的硬件在不在。开机就启动你的驱动程序。 请问我该在哪里初始化硬件呢?在DriverEntry()里吗?在这个函数里我还不能得到系统分配的资源(io地址和中断)啊?我怎么检测硬件呢?你说的退出是怎么退出呢?在哪退出?我觉得驱动程序根本没法像应用程序一样退出来啊。我在DriverEntry()试着返回别的非成功的状态,但是驱动还是照样加载了啊?我该怎么做? |
|
|
5楼#
发布于:2002-07-31 09:03
ISA的系统不会为你分配资源啊。要自己指定或从什么地方得到。
如果你的driver当了service(应该会的啦),你把ISA卡拔了,照样被load,说有这个device。因为你没有办法自动知道ISA卡是否还在的。 |
|
6楼#
发布于:2003-07-09 13:16
其实我的意思是这样的:
我的驱动在被加载之后,驱动是可以检测出ISA硬件到底在不在,在StartDevice例程里检测。问题是,我检测到硬件不在了,那么我如何让我的驱动退出来,就是说,在设备管理器里看不到我的设备了,并且我的驱动也执行了“Unload”例程了,该怎么做呢? |
|
|
7楼#
发布于:2003-07-11 15:41
我也有同样的问题,现在你有什么思路没?
|
|
|
8楼#
发布于:2003-07-11 23:35
我觉得是不是可以认为删除创建的设备,然后手工调用unload,执行停止操作
|
|
|