fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1854回复:6

Remove Device Warning

楼主#
更多 发布于:2001-10-22 11:53
各位好!
我用Driverworks 编写的USB(2131QC)驱动程序现在运行的很乖,只是在我
拔下设备时,Win2k警告我:
  “不安全的设备删除,您没有停止设备就拔出或弹出它,这样做会导致计算机崩溃或数据丢失”
   不理会这个警告,重新插入设备,驱动照样好使!
   我发现是OnRemoveDeivce()有问题,但其里面只有一个函数ReleaseResources();
   我不知道该怎么处理掉这个警告问题。请高人多多指点!

最新喜欢:

laniwtlaniwt
fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-24 09:38
你的比较正式,严谨。
super_gy
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2007-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-24 08:33
基本来说,没什么区别
fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-24 08:28
昨天我发完贴子后,就发现了下面的处理方法(别笑话,我刚开始学习),但今天早上看了您的回复,我不知道二者有何区别,请指点,谢谢

NTSTATUS EzusbDevice::OnQueryCapabilities(KIrp I)
{

I.DeviceCapabilities(CURRENT)->SurpriseRemovalOK=TRUE;

return m_Lower.PnpCall(this, I);

}
super_gy
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2007-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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;
}

fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于: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);
}
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-10-23 10:44
去查我写的题目为“several tips"的贴子
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部