cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
阅读:984回复:0

各位大虾帮我看看有何不妥?

楼主#
更多 发布于:2005-06-20 11:21
  NDIS_STATUS NDIS_API
XF_TcpipReceiveHandler(
IN NDIS_HANDLE NdisBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
)
{
NDIS_STATUS status;

dprintf(("XF_TcpipReceiveHandler\n"));

if(g_isAclFrame )
CheckTcpipRecvBuffer(HeaderBuffer,HeaderBufferSize, LookAheadBuffer,LookaheadBufferSize,PacketSize);

status = m_pTcpipReceiveHandler (
NdisBindingContext,
MacReceiveContext,
HeaderBuffer,
HeaderBufferSize,
LookAheadBuffer,
LookaheadBufferSize,
PacketSize
);
return status;
}

INT NDIS_API
XF_TcpipReceivePacketHandler(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet
)
{
NDIS_STATUS status;

dprintf(("XF_TcpipReceivePacketHandler\n"));


if(g_isAclFrame)
CheckTcpipRecvPacket(Packet);

status = m_pTcpipReceivePacketHandler(ProtocolBindingContext, Packet);

return status;
}

UINT NDIS_API
XF_TcpipCoReceivePacketHandler(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE ProtocolVcContext,
IN PNDIS_PACKET Packet)
{
dprintf(("XF_TcpipCoReceivePacketHandler\n"));

if(g_isAclFrame)
CheckTcpipRecvPacket(Packet);

return m_pTcpipCoReceivePacketHandler( ProtocolBindingContext, ProtocolVcContext, Packet);
}

NDIS_STATUS NDIS_API
XF_TcpipSendHandler(
IN PTCPIP_FUNCTION_MAP FunctionMap,
IN NDIS_HANDLE MacBindingHandle,
IN PNDIS_PACKET Packet
)
{
NDIS_STATUS status;

dprintf(("XF_TcpipSendHandler\n"));

if(m_pSendPacketAddress == 0)
{
m_pSendPacketAddress = (ULONG)FunctionMap -> old_SendHandler;
m_pSendPacketsAddress = (ULONG)FunctionMap -> old_SendPacketsHandler;
}

if(g_isAclFrame)
CheckTcpipSendPacket(Packet);

status = FunctionMap -> old_SendHandler(MacBindingHandle, Packet);

return (status);
}

VOID NDIS_API
XF_TcpipSendPacketsHandler(
IN PTCPIP_FUNCTION_MAP FunctionMap,
IN NDIS_HANDLE NdisBindingHandle,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets
)
{
UINT i = 0;

dprintf(("XF_TcpipSendPacketsHandler\n"));

if(g_isAclFrame)
{
for (i = 0; i < NumberOfPackets; i++)
{
CheckTcpipSendPacket(PacketArray);
}
}

FunctionMap -> old_SendPacketsHandler(NdisBindingHandle, PacketArray, NumberOfPackets);
}

int CheckSendPacket(IN OUT PNDIS_PACKET packet)
{
PNDIS_BUFFER FirstBuffer = NULL;
PVOID VirtualAddress = 0;
int Length = 0;
PETHERNET_FRAME pEthernetFrame = 0;

NdisQueryPacket(packet
, NULL
, NULL
, &FirstBuffer
, NULL
);

if(FirstBuffer != NULL)
{
NdisQueryBufferSafe(FirstBuffer, &VirtualAddress, &Length, HighPagePriority);

if(Length < ETHERNET_FRAME_LENGTH)
return XF_SUCCESS;

pEthernetFrame = (PETHERNET_FRAME)VirtualAddress;

dprintf(("CheckSendPacket: pre 0x%x \n",ntohs(pEthernetFrame -> FrameType)));
pEthernetFrame -> FrameType ^= 0xff;
dprintf(("CheckSendPacket: pos 0x%x \n\n",ntohs(pEthernetFrame -> FrameType)));
}
else
dprintf(("CheckSendPacket: invalid ether packet \n\n"));

return XF_SUCCESS;
}

//解密接收到数据包
int CheckRecvPacket(IN OUT PNDIS_PACKET packet)
{
PNDIS_BUFFER FirstBuffer = NULL;
PVOID VirtualAddress = 0;
int Length = 0;
PETHERNET_FRAME pEthernetFrame = 0;

NdisQueryPacket(packet
, NULL
, NULL
, &FirstBuffer
, NULL);

if(FirstBuffer != NULL)
{
NdisQueryBufferSafe(FirstBuffer, &VirtualAddress, &Length, HighPagePriority);

if(Length < ETHERNET_FRAME_LENGTH)
return XF_SUCCESS;

pEthernetFrame = (PETHERNET_FRAME)VirtualAddress;

dprintf(("CheckRecvPacket: pre 0x%x \n",ntohs(pEthernetFrame -> FrameType)));
pEthernetFrame -> FrameType ^= 0xff;
dprintf(("CheckRecvPacket: pos 0x%x \n\n",ntohs(pEthernetFrame -> FrameType)));
}
else
dprintf(("CheckRecvPacket: invalid ether packet \n\n"));

return XF_SUCCESS;
}
//解密接收到数据包
int CheckRecvBuffer(IN OUT PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize)
{
PETHERNET_FRAME pEthernetFrame = 0;

if(HeaderBuffer &&
(HeaderBufferSize >= ETHERNET_FRAME_LENGTH))
{
pEthernetFrame = (PETHERNET_FRAME)HeaderBuffer;

dprintf(("CheckRecvBuffer: pre 0x%x \n",ntohs(pEthernetFrame -> FrameType)));
pEthernetFrame -> FrameType ^= 0xff;
dprintf(("CheckRecvBuffer: pos 0x%x \n\n",ntohs(pEthernetFrame -> FrameType)));
}
else
dprintf(("CheckRecvBuffer: invalid ether packet \n\n"));

return XF_SUCCESS;
}

各位大虾 , 你帮我看看这里有什么不妥的地方吗? 为何有的网卡对tcp数据没有反应啊?
谢谢
走走看看开源好 Solaris vs Linux
游客

返回顶部