次の方法で共有


ミニポート ドライバー バッファーの管理

ミニポート ドライバーは通常、ミニポートInitializeEx から NdisAllocateNetBufferListPool を呼び出して、NET_BUFFER_LIST構造体のプールを作成します。 ミニポート ドライバーは、受信したデータを示すためにこれらの構造体を使用します。

通常、NET_BUFFER_LIST構造体を割り当てるミニポート ドライバーは、そのNET_BUFFER_LIST構造体に 1 つの NET_BUFFER 構造体を割り当て、キューに入れます。 NET_BUFFER_LIST構造体のプールを割り当てる場合は、NET_BUFFER_LIST構造体とNET_BUFFER構造体を個別に割り当てるよりも、NET_BUFFER構造体を事前に割り当てる方が効率的です。

ミニポート ドライバーは NdisAllocateNetBufferListPool を呼び出し、 割り当てNetBuffer パラメーターを TRUE に設定して 、NET_BUFFER 構造体が事前に割り当てられていることを示すことができます。 この場合、NET_BUFFER構造体は、ドライバーがプールから割り当てる各NET_BUFFER_LIST構造体で事前に割り当てられます。 このようなドライバーは、このプールから構造体を割り当てるために NdisAllocateNetBufferAndNetBufferList を呼び出す必要があります。

通常、ミニポート ドライバーは、ミニポートInitializeEx から NdisAllocateNetBufferAndNetBufferList を呼び出して、後続の受信操作に必要な数のバッファーを割り当てます。 この場合、ドライバーは空きバッファーの内部リストを管理します。

ミニポートReturnNetBufferLists 関数は、後続の受信指示で再利用するために返されたNET_BUFFER_LIST構造体を準備できます。 ミニポートReturnNetBufferLists はプールにNET_BUFFER_LIST構造体を返すことができますが (たとえば、NdisFreeNetBufferList を呼び出すことができます)、プールに返さずに構造体を再利用する方が効率的です。

ミニポート ドライバーは、NDIS がアダプターを停止したときに、すべてのNET_BUFFER_LIST構造体と関連するデータを解放する必要があります。 ドライバーは、構造体と NdisFreeNetBufferListPool 関数を解放する NdisFreeNetBufferListList を呼び出して、NET_BUFFER_LIST プールを解放できます。