次の方法で共有


NdisGetDataBuffer 関数 (ndis/nblapi.h)

NET_BUFFER 構造体から連続したデータ ブロックにアクセスするには、NdisGetDataBuffer 関数を呼び出します。

構文

NDIS_EXPORTED_ROUTINE PVOID NdisGetDataBuffer(
  [in]           NET_BUFFER *NetBuffer,
  [in]           ULONG      BytesNeeded,
  [in, optional] PVOID      Storage,
  [in]           ULONG      AlignMultiple,
  [in]           ULONG      AlignOffset
);

パラメーター

[in] NetBuffer

NET_BUFFER構造体へのポインター。

[in] BytesNeeded

要求されたデータの連続したバイト数。

[in, optional] Storage

バッファーへのポインター。呼び出し元によってバッファーが指定されていない場合は NULL 。 バッファーのサイズは、BytesNeeded で指定されたバイト数以上である必要があります。 この値が非NULLで、要求されたデータが連続していない場合、NDIS は、要求されたデータを Storage で示される領域にコピーします。

[in] AlignMultiple

2 の累乗で表される複数のアラインメント。 たとえば、2、4、8、16 などです。 AlignMultiple が 1 の場合、アラインメント要件はありません。

[in] AlignOffset

アライメントマルチプルからのオフセット (バイト単位)。

戻り値

NdisGetDataBuffer は、連続するデータの先頭へのポインターを返すか、null 返します。

NetBuffer パラメーターが指す NET_BUFFER 構造体の NET_BUFFER_DATA 構造体の DataLength メンバーが、BytesNeeded パラメーターの値より小さい場合、戻り値は NULL

バッファー内の要求されたデータが連続している場合、戻り値は NDIS が提供する場所へのポインターです。 データが連続していない場合、NDIS は次のように Storage パラメーターを使用します。

  • Storage パラメーターが null以外の場合、NDIS は、Storageのバッファーにデータをコピーします。 戻り値は、Storage パラメーターに渡されるポインターです。
  • Storage パラメーターが NULL 場合、戻り値は NULL
データ バッファーをマップできないリソース条件が低いため、戻り値を NULL することもできます。 これは、データが連続している場合や、Storage パラメーターが nullでない場合でも発生する可能性があります。

備考

この関数を呼び出して、NET_BUFFER 構造体に含まれるネットワーク データ ヘッダーへのポインターを取得します。 この関数が返す連続するデータ ブロックに格納されているヘッダーを簡単に解析できます。

要求されたアラインメント要件は、2 乗の倍数とオフセットとして表されます。 たとえば、AlignMultiple が 4 で、AlignOffset が 3 の場合、データ アドレスは 4 + 3 の倍数である必要があります。 必要に応じて、NDIS は配置要件を満たすためにメモリを割り当てます。

必要条件

要件 価値
サポートされる最小クライアント NDIS 6.0 以降でサポートされています。
ターゲット プラットフォーム 万国
ヘッダー ndis/nblapi.h (ndis.h を含む)
ライブラリ Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する Irql_NetBuffer_Function(ndis)

関連項目

NET_BUFFER

NET_BUFFER_DATA