다음을 통해 공유


재조립된 NET_BUFFER_LIST 구조체

NDIS 드라이버는 기존 NET_BUFFER_LIST 구조체에서 재조립된 NET_BUFFER_LIST 구조를 만들 수 있습니다. 재조립된 구조체는 여러 원본 NET_BUFFER 구조체의 원래 데이터를 참조합니다. 드라이버는 이러한 유형의 구조를 사용하여 많은 작은 버퍼를 단일 큰 버퍼로 효율적으로 결합할 수 있습니다.

다음 그림에서는 부모 NET_BUFFER_LIST 구조체와 재조립된 자식 구조 간의 관계를 보여 줍니다.

부모 NET_BUFFER_LIST 구조체와 재조립된 자식 구조 간의 관계를 보여 주는 다이어그램

위의 그림에는 부모 NET_BUFFER_LIST 구조체와 해당 부모에서 파생된 자식 구조체가 포함되어 있습니다. 부모 구조에는 NET_BUFFER_LIST_CONTEXT 구조체 1개와 MDL이 연결된 3개의 NET_BUFFER 구조체가 있습니다. 부모 구조체의 부모 포인터는 파생 구조체가 아님을 나타내는 NULL .

자식 NET_BUFFER_LIST 구조체에는 MDL이 연결된 하나의 NET_BUFFER 구조체가 있습니다. 자식 NET_BUFFER_LIST 구조체에는 부모 구조체에 대한 포인터가 있습니다. NULL이 NET_BUFFER_LIST_CONTEXT 구조 포인터가 있을 자리라는 것은 자식에게 NET_BUFFER_LIST_CONTEXT 구조가 없다는 것을 나타냅니다.

NDIS 드라이버는 NdisAllocateReassembledNetBufferList 함수를 호출하여 조각화된 NET_BUFFER_LIST 구조를 재조립합니다. NDIS는 재조립된 NET_BUFFER_LIST 구조체를 사용하여 새 NET_BUFFER 구조체 및 MDL을 할당합니다. NDIS는 재조립된 구조체에 대한 NET_BUFFER_LIST_CONTEXT 구조를 할당하지 않습니다. 재조립된 NET_BUFFER 구조체 및 MDL은 부모 구조와 동일한 데이터를 설명합니다. 데이터가 복사되지 않습니다.

다시 어셈블된 NET_BUFFER_LIST 구조를 만들려면 NdisAllocateReassembledNetBufferList 각 부모 NET_BUFFER 구조의 StartOffset 매개 변수에 지정된 바이트 수를 건너뜁니다. NdisAllocateReassembledNetBufferList 각 부모 NET_BUFFER 구조체의 나머지 데이터를 다시 어셈블된 하나의 NET_BUFFER 구조체의 MDL 체인에 연결합니다. NdisAllocateReassembledNetBufferList는 DataOffsetDelta 지정된 양만큼 재조립된 NET_BUFFER 구조체를 리트리트(사용된 데이터 공간을 증가).

NDIS 드라이버는 NdisFreeReassembledNetBufferList 함수를 호출하여 재조립된 NET_BUFFER_LIST 구조체와 관련 NET_BUFFER 구조체 및 MDL 체인을 해제합니다.

파생 NET_BUFFER_LIST 구조