Использую пример из WDK - filter. В функциях FilterReceiveNetBufferLists\FilterSendNetBufferLists прохожу по списку NetBufferLists. Для каждого PNET_BUFFER узнаю размер связанных данных: DataLenght = NET_BUFFER_DATA_LENGTH(CurrNetBuffer); выделяю буфер соответствующего размера: Data = (UCHAR *) ExAllocatePoolWithTag(NonPagedPool, DataLenght, 32); и заполняю ее данными: NdisGetDataBuffer(CurrNetBuffer, DataLenght, Data, 1, 0); Теперь я ожидаю там увидеть IP-header, где в нулевом байте будет версия ip и длинна заголовка, а в девятом - номер протокола (для IPv4). Но нет, там совсем не то.. Пдскажите, пожалуйста, как работать с полученными данными?
Уже сам разобрался. Для просветления курил вот это: http://www.ndis.com/ndis-ndis6/inspect/packetinspect.htm http://www.rajivchakravorty.com/source-code/.tmp/snort-html/packet__types_8h-source.html http://www.tcpipguide.com/free/t_IPDatagramGeneralFormat.htm