честно говоря, довольно тяжко разбираться в этом коде... что там родное от пасстру осталось, а где ваши добавления... и какие из них имеются в виду из всех закомментированных.
Прикрепил к сообщению не редактировавшийся пример Passthru.
но я бы посоветовал начать с простого. с простой отправки пакета, не обязательно дублированного.
Простой пакет то отправляет. Тут нет проблемы. А нужно именно продублировать.
Да, над этим я уже думал. Но в MPSend вообще не используется данная функция, а в MPSendPackets она естественно вызывается только один раз. По тому неприменимо для данного случая.
1. Вниз - NdisSend, NdisSendPackets. Это твой драйвер должен уже делать...
2. Вверх - NdisMIndicateReceivePacket. Это твой драйвер должен уже делать...
Если ты хочешь создать новый пакет, ты должен сам его распределить.
Логическая цепочка:
ProtocolReceive()
{
...
NdisAllocatePacket (...)
NdisAllocateBuffer(...)
NdisChainBufferAtBack(...)
//После отправки, ждать возврата пакета в ProtocolSendComplete
NdisSend(...)
}
ProtocolSendComplete()
{
NdisUnchainBufferAtBack(...)
NdisFreeBuffer(...)
NdisReinitializePacket(...)
NdisFreePacket(...)
}
А вот это интересно. В примере NdisAllocateBuffer и NdisChainBufferAtBack вообще не используются.
Я могу предположить, что в новый пакет помещается тот же буфер, что был в старом.
И получается какая-то нестыковка, когда я ещё раз этот буфер использую в третьем пакете.
Что думаете про это? Какие мысли?