blue06
驱动牛犊
驱动牛犊
  • 注册日期2006-08-21
  • 最后登录2020-11-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望117点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1625回复:2

ddk附带的passthru例子是不是有bug?

楼主#
更多 发布于:2008-01-25 19:11
在MPSendPackets函数中,当构造一个新NDIS_PACKET往下层发送时需要保存旧NDIS_PACKET的地址,在这个例子中旧NDIS_PACKET的地址时存放在新NDIS_PACKET的ProtocolReserved变量中,具体代码如下(MyPacket是新包地址,Packet是旧包地址):
  
           PSEND_RSVD        SendRsvd;
           SendRsvd = (PSEND_RSVD)(MyPacket->ProtocolReserved);
           SendRsvd->OriginalPkt = Packet;

但是查看NDIS_PACKET的定义,可以发现ProtocolReserved的定义是 UCHAR[1], 只占一个字节,
而PSEND_RSVD是个指针,占4个字节,这样的话,对SendRecvd的赋值会不会造成越界啊,那位大牛帮忙给解释一下

附:NDIS_PACKET的定义

typedef struct _NDIS_PACKET
{
    。。。。。。
    ULONG_PTR       Reserved[2];            // For compatibility with Win95
   UCHAR           ProtocolReserved[1];                                
} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;

farawayzheng
驱动牛犊
驱动牛犊
  • 注册日期2007-10-30
  • 最后登录2010-03-06
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-31 13:15
NDIS_PACKET生成的时候已经预留了足够的空间
可以查看PacketPool生成时的参数就知道了。
blue06
驱动牛犊
驱动牛犊
  • 注册日期2006-08-21
  • 最后登录2020-11-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望117点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2008-01-31 16:55
呵呵,谢谢了
游客

返回顶部