I should have explained this point….
Generally filter drivers dont buffer data. If data is not accepted by upper driver, the filter driver also rejects the data.
In my case I buffer the data till my buffer is full. After that I start rejecting the data from TCP. Because of buffering I have to do lot of bookkeeping and handle various situation that might occur related to data-reception using TDI_RECEIVE irp and ClientEventReceive.
Hope I make it clear.