В WFP есть одна маленькая хитрость для реинжекта входящих пакетов на сетевом уровне: необходимо что бы данные начинались с IP заголовка, а не сразу за ним как это происходит в буферах по дефолту.
Т.е. где то в коде (до или после клонирования) нужно вызвать NdisRetreatNetBufferDataStart на размер IP заголовка. Это будет выглядеть приблизительно следующим образом:
...
NdisRetreatNetBufferDataStart( pNetBuffer,
inMetaValues->ipHeaderSize, //размер IP заголовка
0, NULL );
...
FwpsAllocateCloneNetBufferList0(
pNetBufferList,
NULL,
NULL,
0,
&pClonedNetBufferList);
FwpsInjectNetworkReceiveAsync0( ... , pClonedNetBufferList, ... );
P.S. Как показала практика лучше делать NdisRetreatNetBufferDataStart до клонирования, иначе можно получить совсем не то что ожидается.
четверг, 13 декабря 2007 г.
Подписаться на:
Сообщения (Atom)