-
Network Data Structureetc/Log 2021. 2. 16. 05:09
네트워크 데이터는 네트워크를 통해 송수신되는 데이터 패킷으로 구성
NDIS 6.0 이상의 기본 네트워크 구조
네트워크 데이터 구조 NET_BUFFER_LIST
- NET_BUFFER 구조의 연결 목록을 지정함
typedef struct _NET_BUFFER_LIST { union { struct { PNET_BUFFER_LIST Next; PNET_BUFFER FirstNetBuffer; }; SLIST_HEADER Link; NET_BUFFER_LIST_HEADER NetBufferListHeader; }; PNET_BUFFER_LIST_CONTEXT Context; PNET_BUFFER_LIST ParentNetBufferList; NDIS_HANDLE NdisPoolHandle; PVOID NdisReserved[2]; PVOID ProtocolReserved[4]; PVOID MiniportReserved[2]; PVOID Scratch; NDIS_HANDLE SourceHandle; ULONG NblFlags; LONG ChildRefCount; ULONG Flags; union { NDIS_STATUS Status; ULONG NdisReserved2; }; PVOID NetBufferListInfo[MaxNetBufferListInfo]; } NET_BUFFER_LIST, *PNET_BUFFER_LIST;
- Next : 체인의 다음 NET_BUFFER_LIST 구조, NET_BUFFER_LIST_NEXT_NBL 매크로를 통해 호출
- FirstNetBuffer : NBL의 첫번째 NET_BUFFER, NET_BUFFER_LIST_FIRST_NB 매크로를 통해 호출
- ParentNetBufferLIst : NBL의 Clone을 만들었을 경우, 원본 NBL을 ParentNBL로 지정
- ChildRefCount : NBL의 Clone을 만들었을 경우, 원본 NBL의 ChildRefCount를 올림
NET_BUFFER
네트워크를 통해 전송되거나 수신되는 데이터를 지정함
typedef struct _NET_BUFFER { union { struct { PNET_BUFFER Next; PMDL CurrentMdl; ULONG CurrentMdlOffset; union { ULONG DataLength; SIZE_T stDataLength; }; PMDL MdlChain; ULONG DataOffset; }; SLIST_HEADER Link; NET_BUFFER_HEADER NetBufferHeader; }; USHORT ChecksumBias; USHORT Reserved; NDIS_HANDLE NdisPoolHandle; PVOID NdisReserved[2]; PVOID ProtocolReserved[6]; PVOID MiniportReserved[4]; NDIS_PHYSICAL_ADDRESS DataPhysicalAddress; union { PNET_BUFFER_SHARED_MEMORY SharedMemoryInfo; PSCATTER_GATHER_LIST ScatterGatherList; }; } NET_BUFFER, *PNET_BUFFER;
- Next : NET_BUFFER 구조의 링크드 리스트에서 다음 NB를 가리키는 포인터
- DataLength : MDL 체인에서 사용된 공간의 길이 (byte)
- DataOffset : MDL 체인의 시작에서 MDL 체인의 네트워크 데이터 시작까지의 오프셋(byte), 사용되지 않은 데이터 공간의 크기
- 전송 시에는 한 NBL이 여러 개의 NB를 갖게 되고, 수신 시에는 한 NBL은 한 개의 NB를 가짐.
- 한 NBL에 속한 NB들은 같은 TCP 스트림을 가지고 있음
- 첫번째 NB의 헤더를 봄으로써 알고싶은 알고 싶은 통신 정보를 볼 수 있음 (IP 주소, 포트 등등...)
NBL, NB 설명 출처 : msdn (docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ndis/ns-ndis-_net_buffer_list, docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ndis/ns-ndis-_net_buffer)
'etc > Log' 카테고리의 다른 글
마이크로소프트 오픈소스에 기여하다? (0) 2023.02.10 Filter driver에서 데이터 송신 (0) 2021.03.16 NDIS filter driver (0) 2021.03.16 인턴일지 - NDIS filter driver (0) 2021.02.16