阅读:1625回复:2
ddk附带的passthru例子是不是有bug?
在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; |
|
沙发#
发布于:2008-01-31 13:15
NDIS_PACKET生成的时候已经预留了足够的空间
可以查看PacketPool生成时的参数就知道了。 |
|
板凳#
发布于:2008-01-31 16:55
呵呵,谢谢了
|
|