Nemesis2k
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2004-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1337回复:1

关于NDIS OOB。。。

楼主#
更多 发布于:2002-05-06 00:20
我贴两个我写的函数:
CopySendOOBData: 在发送packet时复制oob数据。
CopyReceiveOOBData: 在接收到包时复制oob数据。
然后做一下说明,希望能对初学者有所帮助,也希望
大家能指出这两个函数有什么问题。
NDIS_STATUS SendCopyOOBData (PNDIS_PACKET pSendNdisPacket,  PNDIS_PACKET pSrcNdisPacket)
{
PVOID MediaSpecificInfo;
UINT MediaSpecificInfoSize;

// Initialize local vairalbes.
MediaSpecificInfo = NULL;
MediaSpecificInfoSize = 0;

// Set packet flags.
NdisSetPacketFlags (pSendNdisPacket, NdisGetPacketFlags (pSrcNdisPacket));

// Copy the OOB data from the original packet to the new packet.
NdisMoveMemory (NDIS_OOB_DATA_FROM_PACKET (pSendNdisPacket),
   NDIS_OOB_DATA_FROM_PACKET (pSrcNdisPacket),
   sizeof (NDIS_PACKET_OOB_DATA));

// Copy relevant parts of the per packet info into the new packet.
NdisIMCopySendPerPacketInfo (pSendNdisPacket, pSrcNdisPacket);

// Copy the Media specific information.
NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO (pSrcNdisPacket,
&MediaSpecificInfo,
&MediaSpecificInfoSize);
if (MediaSpecificInfo || MediaSpecificInfoSize)
{
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO (pSendNdisPacket,
MediaSpecificInfo,
MediaSpecificInfoSize);
}

// Return.
return NDIS_STATUS_SUCCESS;
}

NDIS_STATUS ReceiveCopyOOBData (PNDIS_PACKET pIndicateNdisPacket, PNDIS_PACKET pSrcNdisPacket)
{
PVOID MediaSpecificInfo;
UINT MediaSpecificInfoSize;

// Initialize local vairalbes.
MediaSpecificInfo = NULL;
MediaSpecificInfoSize = 0;

// Set packet flags.
NdisSetPacketFlags (pIndicateNdisPacket, NdisGetPacketFlags (pSrcNdisPacket));

// Copy the OOB data from the original packet to the new packet.
NdisMoveMemory (NDIS_OOB_DATA_FROM_PACKET (pIndicateNdisPacket),
   NDIS_OOB_DATA_FROM_PACKET (pSrcNdisPacket),
   sizeof (NDIS_PACKET_OOB_DATA));

// Copy relevant parts of the per packet info into the new packet.
NDIS_SET_ORIGINAL_PACKET (pIndicateNdisPacket, NDIS_GET_ORIGINAL_PACKET (pSrcNdisPacket));

// Copy the Media specific information.
NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO (pSrcNdisPacket,
&MediaSpecificInfo,
&MediaSpecificInfoSize);
if (MediaSpecificInfo || MediaSpecificInfoSize)
{
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO (pIndicateNdisPacket,
MediaSpecificInfo,
MediaSpecificInfoSize);
}

// Return.
return NDIS_STATUS_SUCCESS;
}
OOB有三个部分:
NDIS_PACKET_OOB_DATA
MEDIA_SPECIFIC_INFORMATION
NDIS_PER_PACKET_INFO。

NDIS_PACKET_OOB_DATA 和 MEDIA_SPECIFIC_INFORMATION
都好处理,但是NDIS_PER_PACKET_INFO在SendCopyOOBData中,
可以调用NdisIMCopySendPerPacketInfo,而在
ReceiveCopyOOBData中则没有相应的函数了。
另外一个就是original packet.对于NDIS IM Driver
stack,只需要设置original packet就可以了,
而不需要复制OOB.反过来,要复制OOB的话,也应该
复制original packet的,而不是刚好下一层的packet
的。是这样的吗?
Nemesis2k
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2004-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-06 00:23
反过来,要复制OOB的话,也应该
复制original packet的,而不是刚好下一层的packet
的。是这样的吗?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果这个判断正确的话,那
ReceiveCopyOOBData
的实现是有问题的。
游客

返回顶部