slobby
驱动牛犊
驱动牛犊
  • 注册日期2003-12-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1258回复:3

这个蓝屏真奇怪,真奇怪!!

楼主#
更多 发布于:2004-05-07 17:17
编了一个TDI filter驱动,加载后ie能正常上网,然后不关ie,用net stop卸载驱动,再点击ie中的链接试图打开网页时,蓝屏,如果是重开一个ie上网则没有问题,这到底是怎么回事呢?是不是在卸载驱动的时候出问题了?
这是我卸载挂接设备函数
VOID UdpFilterDetach(PDEVICE_OBJECT DeviceObject)
{
pTdiDeviceExt dx;
dx = (pTdiDeviceExt)DeviceObject->DeviceExtension;

if (dx->pTargetFileObj)
ObDereferenceObject(dx->pTargetFileObj);
dx->pTargetFileObj = NULL;
IoDetachDevice(dx->pLowerDeviceObj);
dx->pLowerDeviceObj = NULL;
IoDeleteDevice(DeviceObject);
}
其中tdi filter驱动挂接了\\\\Device\\\\Ip, \\\\Device\\\\RawIp,
\\\\Device\\\\Udp, \\\\Device\\\\Tcp这几个设备,在DriverUnload中循环卸载挂接的设备
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-07 17:59
问题的主要关键是你是否截获了IE设置的事件回调例程???

如果是,则在卸载你的驱动之前必须恢复原来的事件回调例程,否则必蓝屏无疑。

原因:

TCPIP.SYS回调以前上层驱动设置的事件回调例程时,因为你的过滤驱动已经替换了这些缺省例程为你的驱动的事件回调例程,所以TCPIP.SYS实际上是调用了你的驱动的事件回调例程,但是现在你的驱动已经卸载,找不到例程,蓝屏!!!

所以在卸载前必须恢复原来的事件回调例程。

当然,这只是一方面的原因,存在其它的可能,只能靠你慢慢去DEBUG了。
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-07 18:43
 :(
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
slobby
驱动牛犊
驱动牛犊
  • 注册日期2003-12-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-07 21:05
slwqw我想你是对的,非常感谢
游客

返回顶部