Допустим я стал фильтром на девайс \Device\Tcp. Как известно, протокол TCP упорядочивает пришедшие раздробленные пакеты, формирует единый пакет и отправляет его юзермодному получателю. Мой фильтр будет получать уже итоговый пакет или раздробленные фрагменты?
Налицо полное непонимание что такое TCP и как оно работает. Никаких пакетов на этом уровне нет, есть только поток байт, которые как хочешь так и интерпретируй (зависит от вышестоящего протокола). Пакеты имеют место быть уровнем ниже - IP, но на \Device\Tcp ты к ним доступа не получишь (да оно тебе и не нужно скорее всего), здесь у тебя буду данные уже без IP-заголовка.
Rodin, в догонку к вышеотписаному - user mode app работает с потоками данных которые получает/принимает кусками. Термин: buffer. Размер этого блока зависит от параметров сокета и аргументов API. Т.е. может быть по 20 байт а может и 64К.
x64 да и без tcp заголовка.) в запрос TDI_SEND передается Mdl, описывающая данные. Очень похоже на вызов send() из сокетов. аналогично с TDI_RECEIVE
Если быть совсем точным, то здесь данные будут без заголовков всех уровней, начиная с транспортного. Да.