aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
阅读:1908回复:5

版主大人 帮帮忙吧 很简单的一个问题 作tdi大家都会遇到的

楼主#
更多 发布于:2007-01-16 11:43
  本来使用的tdifilterdriver例子,net stop会死机。softice会跳出page fault
而用pcausa的tdi例子passthru打开一个连接就会蓝屏。

后来我实在不行了,就在这个passthru的基础上进行修改。
只提取一些很简单的代码,进行测试。功能就只是进行Kdprint而已。
什么完成函数之类的都没有用了。
这时候不死机了,可是就变成tdifilterdriver的样子,一net stop就出错。

这到底怎么回事啊,我改了好几次,不同样子的。都是这样。

我想每个做过tdi的人应该都会遇到这个情况的啊。
怎么就没有前人说说看呢。

实在不行了 摆脱各位了
周维彬
aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-01-16 17:35
各位大哥大姐们行行好吧 能帮的帮一下
要不再问一个思想性的问题
就是tdi filter 和tdi client的区别

是不是我们打开一个网页或者在玩网游都会经过tdi client啊
我知道会经过tdi filter的。如果我挂接上tcp和udp的话。

还有在client下是否能够更改ip port,数据然后转发。
就回答yes or no就可以了。
我感决是可以拉,就是没有imd这么方便
但是如何更改数据和数据长度我就不清楚了
周维彬
XiangXiangRen
总版主
总版主
  • 注册日期2003-02-22
  • 最后登录2015-09-01
  • 粉丝13
  • 关注0
  • 积分1042分
  • 威望472点
  • 贡献值1点
  • 好评度145点
  • 原创分13分
  • 专家分1分
板凳#
发布于:2007-01-17 09:02
深表同情。其实unload驱动之后发生蓝屏对TDI过滤来说这是很正常的事情,你完全没有必要因为这个就停止使用一个例子。unload的时候发生蓝屏有这么几个可能的原因:
1。生成系统线程后,unload驱动之前没有终止。如果系统线程访问已经卸载的驱动内的地址时,发生非法页面访问错误。这样这个系统线程有可能导致蓝屏。强制终止线程也是不安全的,正确的方法是unload中设置标记,线程根据标记自己终止。而unload等待所有自己生成的系统线程终止后再继续。但是这很麻烦而且没有必要,因为TDI驱动在实用的时候一般都不允许动态卸载。
2。设备UnAttach之后,立刻Unload驱动,这样一来,一些已经发到这个设备的IRP还没有处理完(网络方面的IRP有时耗时很长)。等下层设备完成返回时,上层的设备(也就是过滤器)已经卸载。这样就蓝屏幕了。如果要完美解决,必须自己等待所有IRP处理完毕后再继续。这也是一样的麻烦而且没有必要。简单的处理可以UnAttach一段时间后再 Unload,更简单的就是注意在没有网络活动的时候停止设备。
3。其他编程者自己犯的各类错误。
总之一看见蓝屏就抓狂而进行不下去是不对的。没有什么蓝屏能阻止你做好你的软件,除非你自己放弃。
aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-01-17 10:43
太感谢了;
我的问题好像就是第二个,irp没有处理完。
因为我在蓝屏的时候有看到提示这个。
周维彬
aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
地下室#
发布于:2007-01-17 10:45
对了 你指的unattach就是我们所说的detach吧
我是在unload的时候调用这个函数的。
看来不能在这里detach了
周维彬
aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
5楼#
发布于:2007-01-17 16:41
试过了N次
问题都是DRIVER_IRQL_NOT_LESS_OR_EQRL
看来都是程序卸载之后,系统访问到一个原来的内存地址,可能是函数或者是一些资源。
但是不可能是完成函数。
因为刚开始没有任何完成函数的时候 也是这种情况。
SIGH
周维彬
游客

返回顶部