프로토콜 드라이버는 송신 작업을 위해 NET_BUFFER_LIST 구조 풀 및 NET_BUFFER 구조체 풀을 관리해야 합니다. 이러한 풀을 만들기 위해 드라이버는 다음 함수를 호출합니다.
프로토콜 드라이버는 다음 함수를 사용하여 풀에서 구조를 할당할 수 있습니다.
NdisAllocateNetBufferAndNetBufferList
NdisAllocateNetBufferAndNetBufferList을 호출하는 것이 NdisAllocateNetBufferList을 호출한 후 NdisAllocateNetBuffer을 호출하는 것보다 더 효율적입니다. 그러나 NdisAllocateNetBufferAndNetBufferList NET_BUFFER_LIST 구조체에 하나의 NET_BUFFER 구조만 만듭니다. NdisAllocateNetBufferAndNetBufferList사용하려면 드라이버가 NdisAllocateNetBufferListPool호출할 때 AllocateNetBuffer 매개 변수를 TRUE 설정해야 합니다.
프로토콜 드라이버는 OID 요청을 사용하여 기본 드라이버의 백필 및 컨텍스트 공간 요구 사항을 쿼리할 수 있습니다. 프로토콜 드라이버는 열기 또는 다시 시작 상태에서 바인딩에 대한 백필 및 컨텍스트 요구 사항을 결정해야 합니다. 드라이버는 전체 스택에 충분한 백필 및 컨텍스트 공간을 할당해야 합니다. 필요한 경우 프로토콜 드라이버는 풀을 해제하고 재시작 상태에서 다시 할당할 수 있습니다.
프로토콜 드라이버는 다음 함수를 사용하여 풀을 해제합니다.
프로토콜 드라이버는 다음 함수를 사용하여 풀에서 할당된 구조를 해제합니다.
드라이버는 연결된 NET_BUFFER_LIST 구조를 해제하기 전에 NdisAllocateNetBuffer에 의해 할당된 NET_BUFFER 구조를 반드시 해제해야 합니다. NdisAllocateNetBufferAndNetBufferList으로 할당된 NET_BUFFER 구조체는 드라이버가 관련된 NET_BUFFER_LIST 구조체에 대해 NdisFreeNetBufferList를 호출할 때 해제됩니다.