阅读:2317回复:2
Passthru发送自定义包的一点问题
网上找的现成代码,问题是怎么调用呢?
NdisBindingHandle和NdisSendPacketPool两个参数从哪儿来啊? Passthru不是会绑定所有网卡嘛,我该用哪个adapter发送呢? MySendPacket ( NDIS_HANDLE NdisBindingHandle, NDIS_HANDLE NdisSendPacketPool, PVOID pBuffer, ULONG dwBufferLength ) { NDIS_STATUS status; PNDIS_PACKET pSendPacket = NULL; PNDIS_BUFFER pSendPacketBuffer = NULL; PUCHAR pSendBuffer = NULL; ULONG dwSendBufferLength; NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress; PSEND_RSVD SendRsvd = NULL; if (!NdisBindingHandle) return NDIS_STATUS_FAILURE; if (!pBuffer) return NDIS_STATUS_FAILURE; if (dwBufferLength > ETH_MAX_PACKET_SIZE) return NDIS_STATUS_FAILURE; HighestAcceptableAddress.QuadPart = -1; dwSendBufferLength = max(dwBufferLength, ETH_MIN_PACKET_SIZE); status = NdisAllocateMemory(&pSendBuffer, dwSendBufferLength, 0, HighestAcceptableAddress); if (status != NDIS_STATUS_SUCCESS) { return status; } RtlZeroMemory(pSendBuffer, dwSendBufferLength); RtlMoveMemory(pSendBuffer, pBuffer, dwSendBufferLength); NdisAllocatePacket(&status, &pSendPacket, NdisSendPacketPool); if (status != NDIS_STATUS_SUCCESS) { NdisFreeMemory(pSendBuffer, dwSendBufferLength, 0); return status; } NdisAllocateBuffer( &status, &pSendPacketBuffer, NdisSendPacketPool, pSendBuffer, dwSendBufferLength ); if (status != NDIS_STATUS_SUCCESS) { NdisFreeMemory(pSendBuffer, dwSendBufferLength, 0); NdisDprFreePacket(pSendPacket); return status; } NdisChainBufferAtFront(pSendPacket, pSendPacketBuffer); SendRsvd = (PSEND_RSVD)(pSendPacket->ProtocolReserved); SendRsvd->OriginalPkt = NULL; //注意这里 pSendPacket->Private.Head->Next=NULL; pSendPacket->Private.Tail=NULL; //NDIS_SET_PACKET_HEADER_SIZE(pSendPacket, 14); NdisSetPacketFlags(pSendPacket, NDIS_FLAGS_DONT_LOOPBACK); NdisSend(&status, NdisBindingHandle, pSendPacket); if (status != STATUS_PENDING) { NdisUnchainBufferAtFront(pSendPacket ,&pSendPacketBuffer); NdisQueryBufferSafe( pSendPacketBuffer, (PVOID *)&pSendBuffer, &dwSendBufferLength, HighPagePriority ); NdisFreeBuffer(pSendPacketBuffer); NdisFreeMemory(pSendBuffer, dwSendBufferLength, 0); NdisDprFreePacket(pSendPacket); } return status; } |
|
沙发#
发布于:2010-08-07 17:41
passthru只会绑定一块网卡 你可以在BindAdapter的时候保存adapt的地址之后用这个地址就可以了
|
|
板凳#
发布于:2010-06-19 09:35
这个肯定有人做过呀,拜托给点提示吧orz
|
|