미니포트 드라이버는 일반적으로 MiniportInitializeExNdisAllocateNetBufferListPool 호출하여 NET_BUFFER_LIST 구조의 풀을 만듭니다. 미니포트 드라이버는 이러한 구조를 사용하여 수신된 데이터를 나타냅니다.
일반적으로 NET_BUFFER_LIST 구조를 할당하는 미니포트 드라이버는 해당 NET_BUFFER_LIST 구조체에서 하나의 NET_BUFFER 구조를 할당하고 큐에 대기합니다. NET_BUFFER_LIST 구조체 및 NET_BUFFER 구조를 별도로 할당하는 것보다 NET_BUFFER_LIST 구조 풀을 할당할 때 NET_BUFFER 구조를 미리 할당하는 것이 더 효율적입니다.
미니포트 드라이버는 NdisAllocateNetBufferListPool 호출하고 AllocateNetBuffer 매개 변수를 TRUE 설정하여 NET_BUFFER 구조가 미리 할당되었음을 나타낼 수 있습니다. 이 경우 NET_BUFFER 구조체는 드라이버가 풀에서 할당하는 각 NET_BUFFER_LIST 구조체로 미리 할당됩니다. 이러한 드라이버는 NdisAllocateNetBufferAndNetBufferList 호출하여 이 풀에서 구조를 할당해야 합니다.
일반적으로 미니포트 드라이버는 MiniportInitializeExNdisAllocateNetBufferAndNetBufferList 호출하여 후속 수신 작업에 필요한 만큼의 버퍼를 할당합니다. 이 경우 드라이버는 무료 버퍼의 내부 목록을 관리합니다.
MiniportReturnNetBufferLists 함수는 반환된 NET_BUFFER_LIST 구조를 준비하여 후속 수신 표시에서 다시 사용할 수 있습니다. MiniportReturnNetBufferLists NET_BUFFER_LIST 구조를 풀로 반환할 수 있지만(예: NdisFreeNetBufferList호출할 수 있음) 풀에 반환하지 않고 구조를 다시 사용하는 것이 더 효율적일 수 있습니다.
미니포트 드라이버는 NDIS가 어댑터를 중지할 때 모든 NET_BUFFER_LIST 구조 및 관련 데이터를 해제해야 합니다. 드라이버는 NdisFreeNetBufferList 호출하여 구조를 해제하고 NdisFreeNetBufferListPool 함수를 호출하여 NET_BUFFER_LIST 풀을 해제할 수 있습니다.