次の方法で共有


プロトコル ドライバー バッファーの管理

プロトコル ドライバーは、送信操作 NET_BUFFER_LIST 構造体プールと NET_BUFFER 構造体プールを管理する必要があります。 これらのプールを作成するには、ドライバーは次の関数を呼び出します。

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

プロトコル ドライバーは、次の関数を使用してプールから構造体を割り当てることができます。

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList の呼び出しは、NdisAllocateNetBufferList の後に NdisAllocateNetBuffer を呼び出すよりも効率的です。 ただし、 NdisAllocateNetBufferAndNetBufferList は、NET_BUFFER_LIST構造体に 1 つのNET_BUFFER構造体のみを作成します。 NdisAllocateNetBufferAndNetBufferList を使用するには、ドライバーが NdisAllocateNetBufferListPool を呼び出すときに、AllocateNetBuffer パラメーターを TRUE に設定する必要があります。

プロトコル ドライバーは、OID 要求を使用して、基になるドライバーのバックフィルとコンテキスト領域の要件を照会できます。 プロトコル ドライバーは、 開く 状態または再起動状態のバインディングのバックフィルとコンテキストの要件を決定 する 必要があります。 ドライバーは、スタック全体に十分なバックフィルとコンテキスト領域を割り当てる必要があります。 必要に応じて、プロトコル ドライバーはプールを解放し、 再起動 状態でそれらを再割り当てできます。

プロトコル ドライバーは、プールを解放するために次の関数を使用します。

NdisFreeNetBufferListPool

NdisFreeNetBufferPool

プロトコル ドライバーは、プールから割り当てられた構造体を解放するために次の関数を使用します。

NdisFreeNetBufferList

NdisFreeNetBuffer

ドライバーは、関連付けられているNET_BUFFER_LIST構造体を解放する前に、 NdisAllocateNetBuffer で割り当てられたNET_BUFFER構造体を解放する必要があります。 ドライバーが関連するNET_BUFFER_LIST構造体に対してNdisFreeNetBufferListを呼び出すと、NdisAllocateNetBufferAndNetBufferListで割り当てられたNET_BUFFER構造体が解放されます。