미니포트 드라이버 버퍼 관리

미니포트 드라이버는 일반적으로 MiniportInitializeEx에서 NdisAllocateNetBufferListPool을 호출하여 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 를 호출하여 이 풀의 구조를 할당해야 합니다.

일반적으로 미니포트 드라이버는 MiniportInitializeEx에서 NdisAllocateNetBufferAndNetBufferList를 호출하여 후속 수신 작업에 필요한 만큼의 버퍼를 할당합니다. 이 경우 드라이버는 무료 버퍼의 내부 목록을 관리합니다.

MiniportReturnNetBufferLists 함수는 반환된 NET_BUFFER_LIST 구조를 준비하여 후속 수신 표시에서 재사용할 수 있습니다. MiniportReturnNetBufferLists는 NET_BUFFER_LIST 구조를 풀에 반환할 수 있지만(예: NdisFreeNetBufferList를 호출할 수 있음) 풀로 반환하지 않고 구조를 다시 사용하는 것이 더 효율적일 수 있습니다.

미니포트 드라이버는 NDIS가 어댑터를 중지할 때 모든 NET_BUFFER_LIST 구조 및 관련 데이터를 해제해야 합니다. 드라이버는 NdisFreeNetBufferList 를 호출하여 구조를 해제하고 NdisFreeNetBufferListPool 함수를 호출하여 NET_BUFFER_LIST 풀을 해제할 수 있습니다.