Quakexg
驱动小牛
驱动小牛
  • 注册日期2001-11-21
  • 最后登录2012-02-29
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望56点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
阅读:1723回复:2

passthru与其他软件冲突

楼主#
更多 发布于:2008-11-05 18:07
    遇到个奇怪的问题,我修改了PASSTHRU,加了DEVICEIO的代码,上层用createfile,然后使用deviceiocontrol和驱动通信,功能一切正常.
    但是发现,装了一些软件的机器上,会createfile失败!!!,比如抓包软件commview,把网络属性里的commview的驱动勾掉,createfile就能成功.
    不知道谁碰到过类似的问题,欢迎探讨下解决办法.
Quakexg
驱动小牛
驱动小牛
  • 注册日期2001-11-21
  • 最后登录2012-02-29
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望56点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-11-06 09:46
代码为:
m_hDevice = CreateFile("\\\\.\\Global\\MYFILTER",
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL
        );
谁来说几句啊.
Quakexg
驱动小牛
驱动小牛
  • 注册日期2001-11-21
  • 最后登录2012-02-29
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望56点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-11-10 17:37
    跟踪了下ptbindadapter,ptunbindadapter,mpinitialize,mphalt,发现CreateFile失败的过程了,但是不知道是什么引起和导致的根本原因.
    原因:commview有个协议层驱动,当它安装时,会unbind->mphalt(当时adapterlist里只有1个网卡,所以,就把DEVICEIO的设备关掉了NdisMDeregisterDevice)->ptbind->mpinit(重新NdisMRegisterDevice,而这次注册后,上层CreateFile失败)
    解决办法:在driverentry里NdisMRegisterDevice,在卸载时,由上层发一个标志量给驱动,当mphalt时,当adapterlist为空了,并且标志量为卸载了,才NdisMDeregisterDevice.

    不足:如果ptunload会被调用,那么应该在这个函数里NdisMDeregisterDevice,但是众所周知,这个函数不一定被调用.所以不得已加个标志量,驱动卸载只能完全由自己的程序控制,如果到网络属性里卸载,那么不会运行NdisMDeregisterDevice.卸载后必须必须重起机器.

    思考:1.ptunload不一定执行,那么PASSTHRU本身就有资源没被释放!!!
             2.commview的协议驱动(猜测是协议驱动)安装时,为什么会先unbind,再bind网卡呢?

谁来说一下思考2.谢谢
游客

返回顶部