hsluoyz
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1914回复:4

请问怎么在MPTransferData和PtTransferDataComplete里替换成自己的包?

楼主#
更多 发布于:2012-12-15 21:06
大家都知道,在passthru里收包过滤的地方有四个:PtReceive、PtReceivePacket、MPTransferData、PtTransferDataComplete
我想在收包的时候实现用另外一个自己组的包替换掉原来的包。PtReceive、PtReceivePacket例子里新的NDIS_PACKET都构造好了,自己填buffer就行了,然后再处理一下释放函数PtSendComplete和MPReturnPacket就行了。比较简单。
但是MPTransferData、PtTransferDataComplete应该如何替换包呢?需不需要向上面一样处理什么释放函数?
zhangfresh
驱动牛犊
驱动牛犊
  • 注册日期2008-07-21
  • 最后登录2023-01-09
  • 粉丝1
  • 关注2
  • 积分94分
  • 威望871点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2012-12-18 11:37
中间层驱动要么触发PtReceivePacket,要么触发PtReceive。触发PtReceived的时候,中间层会继续向网卡驱动获取数据,网卡驱动提交后续数据,会触发MPTransferData,提交完了,会触发PtTransferDataComplete。
PtReceive里面无法获取到一个完整的packet,导致后面两个函数触发的机会非常少。以前我一个驱动,在后两个处理函数中有个bug,在项目中运行了很久都没出问题,后来有一款无线网卡,做了特殊设置,碰上无线信号不好,才走到后面两个函数,蓝屏了。

严重推荐《寒江独钓》,网络上也有很多相关博客。
xczc10@sina.cn
驱动牛犊
驱动牛犊
  • 注册日期2012-12-06
  • 最后登录2012-12-23
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望171点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2012-12-18 16:41
帮忙顶..等待高手
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2012-12-30 15:56
直接设置成失败就OK
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
hsluoyz
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2013-03-03 13:01
好吧。。确实我从调试信息里从没见过MPTransferData、PtTransferDataComplete的调用,不过还是很想知道应该怎么修改buffer,怎么释放MyPacket
另外LS说的,只有MPTransferData有状态返回值,可以设置成失败,但是PtTransferDataComplete返回值是void,又该如何处理呢?

现在我是MPTransferData返回NDIS_STATUS_FAILURE,PtTransferDataComplete就直接return了,连最后的NdisMTransferDataComplete都不要了,这样做可以吗?


NDIS_STATUS
MPTransferData(
    OUT PNDIS_PACKET            Packet,
    OUT PUINT                   BytesTransferred,
    IN NDIS_HANDLE              MiniportAdapterContext,
    IN NDIS_HANDLE              MiniportReceiveContext,
    IN UINT                     ByteOffset,
    IN UINT                     BytesToTransfer
    )

VOID
PtTransferDataComplete(
    IN  NDIS_HANDLE         ProtocolBindingContext,
    IN  PNDIS_PACKET        Packet,
    IN  NDIS_STATUS         Status,
    IN  UINT                BytesTransferred
    )
游客

返回顶部