20楼#
发布于:2004-05-01 19:11
[quote][quote][quote] 不怪,系统传给你的那个包你返回成功,只是协议层看到包是发出去了,但真正要发出去,还得调用下层的miniport才能发出, 多看看passthru的原理。 [/quote] 你的意思是系统传给我的那个包返回成功,但不返回给SEND_HANDLER是么?这样系统传给我的那个包就不会发出去了 [/quote]用MyPacket代替Packet调用SendHandler [/quote] ok,我现在用你说的第一种方法实现了自己的包替换原包发送,感谢,给分:),现在就是在SendComplete中资源释放有点问题,也不知道算不算问题,我一用NdisFreeMemory(pPacketContent,bufLength,0);释放自己构造的包就蓝屏,把这句屏蔽掉就不会蓝屏了,工作也还正常,不知道这样做会不会有问题啊. |
|
|
21楼#
发布于:2004-05-01 21:28
SendComplete的问题已经跟你说了,自己慢慢体会吧,如果你还不能做对,说明你还没有看懂:)
|
|
22楼#
发布于:2004-05-07 09:16
youngyt:先谢谢你的指点,那个是没有错误了,但是我一装上驱动以后,系统就马上重起,重新启动后,系统就说检测到新硬件让我更新驱动程序!然后我就不能上网了(我们使用的认证上网的),说是找不到网卡,我费了好大的劲才把那个给卸掉!然后才可以上网,不知为何故。????以前调试的时候也碰到过类似的问题,不知道是怎么引起的,还望各位大侠帮帮我了,下面是部分代码:
pPacketContent为一个字符缓冲区,pPacketBuffer 为一个PNDIS_BUFFER缓冲区,然后再重新构造一个包,帮我看看想这样做错在什么地方?谢谢了 //分配一个PNDS_BUFFER缓冲区pPacketBuffer,指向pPacketContent缓冲区 NdisAllocateBuffer(&Status, &pPacketBuffer, pAdapt->SendPacketPoolHandle, pPacketContent, PacketBufferLen); if (Status == NDIS_STATUS_SUCCESS) NdisChainBufferAtBack(MyPacket,pPacketBuffer); NdisSend(&Status, pAdapt->BindingHandle, MyPacket); if (Status != NDIS_STATUS_PENDING) { NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket); NdisFreeBuffer(pPacketBuffer); NdisFreeMemory(pPacketContent, 2000, 0); NdisFreePacket(MyPacket); } |
|
23楼#
发布于:2004-05-07 14:19
youngyt:先谢谢你的指点,那个是没有错误了,但是我一装上驱动以后,系统就马上重起,重新启动后,系统就说检测到新硬件让我更新驱动程序!然后我就不能上网了(我们使用的认证上网的),说是找不到网卡,我费了好大的劲才把那个给卸掉!然后才可以上网,不知为何故。????以前调试的时候也碰到过类似的问题,不知道是怎么引起的,还望各位大侠帮帮我了,下面是部分代码: NdisChainBufferAtBack(MyPacket,pPacketBuffer);这句之前你有没有做过这样的操作: MyPacket->Private.Head = NULL; MyPacket->Private.Tail = NULL; 你最好多贴一点上来。 BTW:你的问题与此贴主题差太多了,建议新开贴。 :D [编辑 - 5/7/04 by youngyt] |
|
上一页
下一页