NdisAllocateNetBufferAndNetBufferList 関数 (ndis/nblapi.h)
NdisAllocateNetBufferAndNetBufferList 関数を呼び出して、事前に割り当てられた NET_BUFFER 構造体で初期化される NET_BUFFER_LIST 構造体を割り当てて初期化します。
構文
NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateNetBufferAndNetBufferList(
[in] NDIS_HANDLE PoolHandle,
[in] USHORT ContextSize,
[in] USHORT ContextBackFill,
[in, optional] __drv_aliasesMem MDL *MdlChain,
[in] ULONG DataOffset,
[in] SIZE_T DataLength
);
パラメーター
[in] PoolHandle
から以前に返されたNET_BUFFER_LIST構造体プール ハンドルNdisAllocateNetBufferListPool 関数を します。 呼び出し元が NdisAllocateNetBufferListPool に渡 した NET_BUFFER_LIST_POOL_PARAMETERS 構造体の fAllocateNetBuffer メンバーは、TRUE を に設定し、DataSize メンバーを 0 に設定する必要があります。
[in] ContextSize
呼び出し元 予約するために NET_BUFFER_LIST_CONTEXT 構造体で データ領域を使用した量。 ContextSize は、MEMORY_ALLOCATION_ALIGNMENTによって定義された値の倍数である必要があります。
[in] ContextBackFill
呼び出し元 必要な未使用のデータ領域 (バックフィル領域) の量。 NDIS は、この値を ContextSize に追加し、追加の領域を割り当てます。 ContextBackFill は、MEMORY_ALLOCATION_ALIGNMENTによって定義された値の倍数である必要があります。
[in, optional] MdlChain
事前に割り当てられたNET_BUFFER構造体を初期化するために NDIS が使用する MDL チェーンへのポインター。 MdlChain NULL をできます。
[in] DataOffset
バッファーの先頭から、MDL チェーン内の 使用 データ空間の先頭までの初期オフセット (バイト単位)。 このオフセットの前のデータ領域は、未使用のデータ領域 。 したがって、この値は、MDL チェーン内の使用可能なバックフィル領域の初期量も表します。 MdlChain が NULL 場合、DataOffset 0 にする必要があります。
[in] DataLength
MDL チェーンで使用 のデータ空間の長さ (バイト単位)。 MdlChain NULL 場合、DataLength 0 にする必要があります。
戻り値
NdisAllocateNetBufferAndNetBufferList は、割り当てられたNET_BUFFER_LIST構造体へのポインターを返します。 NET_BUFFER_LIST構造体には、NET_BUFFER構造体が含まれています。 割り当てが失敗した場合、このポインターは NULL 。
備考
NdisAllocateNetBufferAndNetBufferList 関数が割り当てる構造体は、事前に割り当てられた NET_BUFFER 構造体とペアになっている NET_BUFFER_LIST 構造体を含むプールから取得する必要があります。 このようなプールを作成するには、 ndisAllocateNetBufferListPool 関数で、NET_BUFFER_LIST_POOL_PARAMETERS 構造体の fAllocateNetBuffer メンバーが TRUE に設定され、DataSize メンバーが 0 に設定されます。
事前に割り当てられた NET_BUFFER は、NET_BUFFERを所有している場合は別の MDL チェーンで再初期化することで再利用できますが、DataOffset、DataLength、CurrentMdl、CurrentMdlOffset フィールドは、NET_BUFFER の新しい MDL チェーンと一致している必要があります。
たとえば、元の MDL チェーンに XDataLength と YDataOffsetが含まれており、元の MDL チェーンの 2 番目の MDL (M) で始まる currentMdl 場合、CurrentMdlOffset は Z です。その後、NET_BUFFER_DATA の MdlChain フィールドは、X'DataLength と Y'DataOffsetを含む新しい MDL チェーンを指す必要があります。 CurrentMdl が新しい MDL チェーンの 3 番目の MDL (M') で始まる場合、CurrentMdlOffset は Z され、次のマクロを使用して NET_BUFFERのフィールドを設定する必要があります。
NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ndis/nblapi.h (ndis.h を含む) |
ライブラリ | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 を する | Irql_NetBuffer_Function(ndis), NdisAllocateNetBufferList(ndis), NdisAllocateNetBufferList_InitFail(ndis) |
関連項目
NET_BUFFER_LIST_POOL_PARAMETERS
NdisAllocateNetBufferListPool のNdisFreeNetBufferList の