次の方法で共有


NdisAllocateNetBuffer 関数 (ndis/nblapi.h)

NdisAllocateNetBuffer 関数を呼び出して、NET_BUFFER 構造体プールから NET_BUFFER 構造体を割り当てて初期化します。

構文

NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
  [in]           NDIS_HANDLE PoolHandle,
  [in, optional] MDL         *MdlChain,
  [in]           ULONG       DataOffset,
  [in]           SIZE_T      DataLength
);

パラメーター

[in] PoolHandle

の呼び出しから以前に返された NET_BUFFER 構造体プール ハンドルNdisAllocateNetBufferPool します。

[in, optional] MdlChain

NDIS が新しい NET_BUFFER 構造体を初期化するために使用する MDL チェーンへのポインター。 MdlChain NULL できます。

[in] DataOffset

バッファーの先頭から、MDL チェーン内の 使用 データ空間の先頭までの初期オフセット (バイト単位)。 このオフセットの前のデータ領域は、未使用のデータ領域 。 したがって、この値は、MDL チェーン内の使用可能なバックフィル領域の初期量も表します。 MdlChain が NULL 場合、DataOffset 0 にする必要があります。

[in] DataLength

MDL チェーンで使用 のデータ空間バイト単位の長さ。 MdlChain NULL 場合、DataLength 0 にする必要があります。

戻り値

NdisAllocateNetBuffer は、NDIS が割り当てた NET_BUFFER 構造体へのポインターを返します。 割り当てが失敗した場合、このポインターは NULL

備考

NdisFreeNetBuffer 呼び出して、NET_BUFFER 構造体プールから割り当てられた NET_BUFFER 構造体を解放します。

NET_BUFFER および NET_BUFFER_LIST 構造体は、NDIS バッファー プールから割り当てる必要があります。 ドライバーは、プライベート メモリ プールまたはスタックから NET_BUFFER または NET_BUFFER_LIST 構造体を割り当てて初期化することはできません。
 
事前割り当て済みの NET_BUFFER は、NET_BUFFERを所有する場合に別の MDL チェーンで再初期化することで再利用できますが、DataOffsetDataLengthCurrentMdlCurrentMdlOffset フィールド NET_BUFFER 新しい MDL チェーンと一致している必要があります。

たとえば、元の MDL チェーンに XDataLengthYDataOffsetが含まれており、元の MDL チェーンの 2 番目の MDL (M) で始まる currentMdl 場合、CurrentMdlOffset は Z です。その後、NET_BUFFER_DATAMdlChain フィールドは、X'DataLengthY'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)NdisAllocateNetBuffer(ndis)

関連項目

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer