TDI Udp receive handler question

I have a question about the ClientEventReceiveDatagram of TDI. The
documentation states that the underlying transport may call my registered
ClientEventReceiveDatagram function with any number of bytes up to the size
of the full datagram. In my driver, I read in number of bytes equal to a
header I define. I then decode the header and if I do not like what I see I
want to discard the datagram because that means it is not from a source I
care about. The documentation states that if my function is not interested
in the data it can return STATUS_DATA_NOT_ACCEPTED. My questions are the
following.

  1. Does returning STATUS_DATA_NOT_ACCEPTED reject the entire datagram or
    (potentially) just the piece that was presented?

  2. If the rejection of the data is piecemeal then how to I determine where
    the end of a datagram is and the start of the next?

  3. Can I make TDI present only complete datagrams?

Any help is appreciated.

Sean O’Connor - suffering from TDI brain rot