다음을 통해 공유


필터 드라이버 버퍼 관리

필터 드라이버는 버퍼를 만들어 다른 드라이버에서 가져온 네트워크 데이터를 복사하거나 보내기 또는 수신 작업을 시작합니다.

필터 드라이버가 버퍼를 만들지 않으면 드라이버는 버퍼 풀을 관리하지 않습니다. 이러한 드라이버는 단순히 다른 드라이버에서 수신하는 버퍼를 전달합니다.

송신 또는 수신 작업을 지원하는 버퍼를 만드는 필터 드라이버는 NET_BUFFER_LIST 구조체 풀 및 NET_BUFFER 구조체 풀을 관리해야 합니다.

이러한 풀을 만들려면 드라이버는 다음 함수를 호출합니다.

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

필터 드라이버는 다음 함수를 사용하여 풀에서 구조를 할당할 수 있습니다.

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList를 호출하는 것은 NdisAllocateNetBufferList를 호출한 다음 NdisAllocateNetBuffer를 호출하는 것보다 더 효율적입니다. 그러나 NdisAllocateNetBufferAndNetBufferList 는 NET_BUFFER_LIST 구조체에 하나의 NET_BUFFER 구조만 만듭니다. NdisAllocateNetBufferAndNetBufferList를 사용하려면 드라이버가 NdisAllocateNetBufferListPool을 호출할 때 AllocateNetBuffer 매개 변수를 TRUE로 설정해야 합니다.

송신 요청을 시작하는 필터 드라이버는 기본 드라이버의 컨텍스트 및 백필 공간 요구 사항을 결정해야 합니다. 필터 드라이버는 다시 시작 특성을 사용하여 기본 드라이버의 백필 요구 사항을 결정합니다. 필터 드라이버는 다시 시작 상태에서 백필 및 컨텍스트 요구 사항을 결정해야 합니다. 드라이버는 전체 스택에 충분한 백필 및 컨텍스트 공간을 할당해야 합니다. 필요한 경우 필터 드라이버는 풀을 해제하고 다시 시작 상태에서 다시 할당할 수 있습니다.

필터 드라이버는 다음 함수를 사용하여 풀을 해제합니다.

NdisFreeNetBufferListPool

NdisFreeNetBufferPool

필터 드라이버는 다음 함수를 사용하여 풀에서 할당된 구조를 해제합니다.

NdisFreeNetBufferList

NdisFreeNetBuffer

드라이버는 연결된 NET_BUFFER_LIST 구조를 해제하기 전에 NdisAllocateNetBuffer 로 할당된 NET_BUFFER 구조를 해제해야 합니다. 드라이버가 연결된 NET_BUFFER_LIST 구조체에 대해 NdisFreeNetBufferList를 호출하면 NdisAllocateNetBufferAndNetBufferList로 할당된 NET_BUFFER 구조체가 해제됩니다.