阅读:1853回复:6
Remove Device Warning
各位好!
我用Driverworks 编写的USB(2131QC)驱动程序现在运行的很乖,只是在我 拔下设备时,Win2k警告我: “不安全的设备删除,您没有停止设备就拔出或弹出它,这样做会导致计算机崩溃或数据丢失” 不理会这个警告,重新插入设备,驱动照样好使! 我发现是OnRemoveDeivce()有问题,但其里面只有一个函数ReleaseResources(); 我不知道该怎么处理掉这个警告问题。请高人多多指点! |
|
最新喜欢:![]() |
沙发#
发布于:2001-10-23 10:44
去查我写的题目为“several tips"的贴子
|
|
|
板凳#
发布于:2001-10-23 15:41
老兄:
在我用的Driverstudio2.0 生成的程序中我没有找到 IRP_MN_QUERY_CAPABILITIES的处理函数! 我用了以下的笨办法,但是还是失败了,请指教! NTSTATUS EzusbDevice:: DefaultPnp(KIrp I) { t << "Entering EzusbDevice:: DefaultPnp with IRP minor function=" << PNPMinorFunctionName(I.MinorFunction()) << EOL; static char xMinFun[]="IRP_MN_QUERY_CAPABILITIES"; char *MinFun = PNPMinorFunctionName(I.MinorFunction()); if(strcmp(xMinFun,MinFun) == 0) { PDEVICE_CAPABILITIES pDevCap = I.DeviceCapabilities(CURRENT); pDevCap->SurpriseRemovalOK=TRUE; pDevCap->Removable=TRUE; pDevCap->EjectSupported=TRUE; pDevCap->WarmEjectSupported=TRUE; } I.ForceReuseOfCurrentStackLocationInCalldown(); return m_Lower.PnpCall(this, I); } |
|
地板#
发布于:2001-10-23 16:21
其实类KPnpDevice有一个虚拟成员函数
virtual NTSTATUS OnQueryCapabilities(KIrp I); 你只需要在你的实现类中重载这个函数就行了。 以下是我的驱动程序中摘出来的,你可以参考一下 NTSTATUS MyusbDevice::OnQueryCapabilities(KIrp I) { t << "Entering UsbThermometer::OnQueryCapabilities\n"; I.CopyParametersDown(); I.SetCompletionRoutine(LinkTo(OnQueryCapabilitiesComplete), this, TRUE, TRUE, TRUE); return m_Lower.PnpCall(this, I); } NTSTATUS MyusbDevice::OnQueryCapabilitiesComplete(KIrp I) { if (I->PendingReturned) I.MarkPending(); I.DeviceCapabilities()->SurpriseRemovalOK = TRUE; return STATUS_SUCCESS; } |
|
地下室#
发布于:2001-10-24 08:28
昨天我发完贴子后,就发现了下面的处理方法(别笑话,我刚开始学习),但今天早上看了您的回复,我不知道二者有何区别,请指点,谢谢
NTSTATUS EzusbDevice::OnQueryCapabilities(KIrp I) { I.DeviceCapabilities(CURRENT)->SurpriseRemovalOK=TRUE; return m_Lower.PnpCall(this, I); } |
|
5楼#
发布于:2001-10-24 08:33
基本来说,没什么区别
|
|
6楼#
发布于:2001-10-24 09:38
你的比较正式,严谨。
|
|