阅读:1723回复:2
passthru与其他软件冲突
遇到个奇怪的问题,我修改了PASSTHRU,加了DEVICEIO的代码,上层用createfile,然后使用deviceiocontrol和驱动通信,功能一切正常.
但是发现,装了一些软件的机器上,会createfile失败!!!,比如抓包软件commview,把网络属性里的commview的驱动勾掉,createfile就能成功. 不知道谁碰到过类似的问题,欢迎探讨下解决办法. |
|
沙发#
发布于:2008-11-06 09:46
代码为:
m_hDevice = CreateFile("\\\\.\\Global\\MYFILTER", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); 谁来说几句啊. |
|
板凳#
发布于: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.谢谢 |
|