Get TCP packet from NDIS Structs.

Hello i’m trying to understand how NDIS works, my question is:

How can we access to TCP packets receive from this structures:

typedef struct _NET_BUFFER_LIST {
NET_BUFFER_LIST_HEADER NetBufferListHeader;
PNET_BUFFER_LIST_CONTEXT Context;
PNET_BUFFER_LIST ParentNetBufferList;
NDIS_HANDLE NdisPoolHandle;
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID NdisReserved[2]; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID ProtocolReserved[4]; DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID MiniportReserved[2]; PVOID Scratch;
NDIS_HANDLE SourceHandle;
ULONG NblFlags;
LONG ChildRefCount;
ULONG Flags;
NDIS_STATUS Status;
PVOID NetBufferListInfo[MaxNetBufferListInfo];
} NET_BUFFER_LIST, *PNET_BUFFER_LIST;

or this one:

typedef struct _MP_RFD
{
LIST_ENTRY List;
PNET_BUFFER_LIST NetBufferList;
PMDL Mdl; // Mdl pointing to Buffer

PHW_RFD HwRfd; // ptr to hardware RFD
PHW_RFD OriginalHwRfd; // ptr to memory allocated by NDIS
NDIS_PHYSICAL_ADDRESS HwRfdPa; // physical address of RFD
NDIS_PHYSICAL_ADDRESS OriginalHwRfdPa; // Original physical address allocated by NDIS
ULONG HwRfdPhys; // lower part of HwRfdPa

ULONG Flags;
UINT PacketSize; // total size of receive frame
} MP_RFD, *PMP_RFD;