阅读:985回复:0
各位大虾帮我看看有何不妥?
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数据没有反应啊? 谢谢 |
|
|