Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1555回复:10

拔下设备98就不能关机了,怎么回事?

楼主#
更多 发布于:2001-12-06 14:22
我定义了OnRemoveDevice过程,在这个过程中使用对98执行了以下操作:
1.删除Symbol Link Name
2.IoUnregisterShutdownNotificatin(Pdo);
3.使用IoDeleteDevice删除设备
4.ExFreePool释放在AddDevice中分配的非分页内存。
但98关机时花屏,相同的程序在2k和xp下就没问题,请各位看看我有哪些疏漏造成没有把全部的资源释放掉造成不能关机,谢谢各位!
Wing ―――――――――――― 一对正在飞翔的翅膀
yuzhi
驱动牛犊
驱动牛犊
  • 注册日期2001-12-19
  • 最后登录2003-01-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-20 21:23
到msdn.microsoft.com去,用usb做关键词查找,有专门对这个问题的回答。
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-12-18 15:44
这是一段代码,是使用ds做的,其中的bRemoved部分可能由于少了一些对IRP的操作造成RemoveSpecificEntry(I)未能正确执行,所以里面的过程也没能执行,请各位朋友帮忙看看少了什么操作?
------------------------------
KDeviceQueue dq(DeviceQueue());
dq.Unlock();
CancelSpinLock::Release(I->CancelIrql);
BOOLEAN bRemoved = dq.RemoveSpecificEntry(I);
CancelSpinLock::Release(I->CancelIrql);
if ( bRemoved )
{
    t<<\"Cancel: bRemoved OK!\\n\";
    I.Information() = 0;
    I.Complete(STATUS_CANCELLED);
}
---------------------------------
Wing ―――――――――――― 一对正在飞翔的翅膀
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-12-18 15:30
这一句肯定要有的,但在执行这一句之前要做什么工作呢?比如spinlock等如何操作呢?
Wing ―――――――――――― 一对正在飞翔的翅膀
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-12-18 12:05
我的程序是用ds写的,我想把Irp从队列中删除然后设置为STUTUS_CANCELED,但为什么不能从队列中删除呢?


IoCompleteRequest
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-12-18 11:44
我的程序是用ds写的,我想把Irp从队列中删除然后设置为STUTUS_CANCELED,但为什么不能从队列中删除呢?
Wing ―――――――――――― 一对正在飞翔的翅膀
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-12-18 10:10
我自己没有碰到过,能说什么呢?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-12-12 15:34
斑竹:出手帮忙吧!
Wing ―――――――――――― 一对正在飞翔的翅膀
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-12-10 16:12
这个问题是太简单了?怎么没有人肯帮忙?寒心呀! :(
Wing ―――――――――――― 一对正在飞翔的翅膀
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-12-06 17:17
我查看以前的帖子,提到要加入DecrementOutstandingRequest,但我跟踪后发现这个函数在OnRemoveDevice时会被自动执行的,它包含在kpnpdev.cpp中了,是不是和它无关?

在OnRemoveDevice中我使用m_RequestConter.Reset();将m_RequestCounter进行初始化,变成了0,然后又进行了我第一贴中的操作,还是不能关机。
Wing ―――――――――――― 一对正在飞翔的翅膀
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-12-06 17:05
这个问题原来虽然有人问过,但并没有解决问题,为什么连回答的都没有?太简单了?
Wing ―――――――――――― 一对正在飞翔的翅膀
游客

返回顶部