阅读:1313回复:6
NdisSend 网卡句柄 哪里能够取得?
我的中间层发包 程序 在 NdisSend 这里 蓝屏
NdisSend(&Status, pUnderAdapt->BindingHandle, ArpPacket); pUnderAdapt 是 程序在BindAdapt的时候 复制下来的 全局指针 PADAPT 每次接到DeviceIO发包 调用 NdisSend 都是死机 。 是不是我网卡 PADAPT 的问题? |
|
沙发#
发布于:2007-08-13 09:37
顶下啊。。帮忙谁知道说下啊
MPSend()的网 卡句柄 是系统过来的。。我要是自己调用呢。用哪个Handle |
|
板凳#
发布于:2007-08-13 10:20
调用NdisSend没有问题.不要直接调用MPSend.检查一下protoclsendcomplete函数,对于上层协议来的包,和自己发的包,是不是做了区分处理.
|
|
地板#
发布于:2007-08-13 13:54
问下
程序在BindAdapt的时候 复制下来的 全局指针 PADAPT 网卡指针 这么获得没问题吧? 我在去看看protoclsendcomplete |
|
地下室#
发布于:2007-08-13 14:08
不能用全局指针,因为BindAdapt可能会绑定多块网卡。
调用NdisSend通常是在MPSend或MPSendPackets里, 这两个函数都有一个参数NDIS_HANDLE MiniportAdapterContext; 1、先把MiniportAdapterContext转换成PADAPT PADAPT pAdapt = (PADAPT)MiniportAdapterContext; 2、再调用NdisSend(&Status, pAdapt->BindingHandle, Packet); 如果不在这两个函数里面调用NdisSend,你需要先在MPSend或MPSendPackets里面将pAdapt保存起来,需要的时候再调用。 |
|
5楼#
发布于:2007-08-13 15:35
谢谢楼上的啊。。。
我在MPSendPackets 里拷贝下来的也是一样的蓝屏 可能是因为sendcomplete里面 没有对非 系统包进行处理的原因嘛? 我是在 packet != adapt->sendpoolhandle 里面判断是不是系统和自己的包的 对于自己的包 直接free |
|
6楼#
发布于:2007-08-13 15:36
我正看 ndispro协议层 驱动呢。
哎。。就为了发个arp包。搞的这么麻烦 听了版主的建议。。我改用。协议层写 那个例子貌似正好实现我这个功能。。 |
|