プロトコル ドライバー バッファー管理
プロトコル ドライバーは、送信操作の NET_BUFFER_LIST 構造プールと NET_BUFFER 構造プールを管理する必要があります。 これらのプールを作成するのにドライバーが呼び出す関数は、次のとおりです。
プロトコル ドライバーは、次の関数を使用してプールから構造を割り当てることができます。
NdisAllocateNetBufferAndNetBufferList
NdisAllocateNetBufferAndNetBufferList の呼び出しは、NdisAllocateNetBufferList の後に NdisAllocateNetBuffer を呼び出すよりも効率的です。 ただし、NdisAllocateNetBufferAndNetBufferList は、NET_BUFFER_LIST 構造に 1 つの NET_BUFFER 構造のみ作成します。 NdisAllocateNetBufferAndNetBufferList を使用するには、ドライバーが NdisAllocateNetBufferListPool を呼び出すときに、AllocateNetBuffer パラメーターを TRUE に設定する必要があります。
プロトコル ドライバーは、OID 要求を使用し、基になるドライバーのバックフィルとコンテキスト領域の要件を照会できます。 プロトコル ドライバーは、オープン中状態または再起動中状態のバインディングのバックフィルとコンテキストの要件を決定する必要があります。 ドライバーは、スタック全体に十分なバックフィルとコンテキスト領域を割り当てなければなりません。 必要に応じて、プロトコル ドライバーはプールを解放し、再起動中状態でそれらを再割り当てできます。
プロトコル ドライバーは、次の関数を使用してプールを開放します。
プロトコル ドライバーは、以下の関数を使用して、割り当てられた構造をプールから解放することができます。
ドライバーは、関連付けられている NET_BUFFER_LIST 構造を解放する前に、NdisAllocateNetBuffer で割り当てられた NET_BUFFER 構造を解放しなければなりません。 ドライバーが関連付けられた NET_BUFFER_LIST 構造の NdisFreeNetBufferList を呼び出すと、NdisAllocateNetBufferAndNetBufferList によって割り当てられた NET_BUFFER 構造が解放されます。