次の方法で共有


NdisMAllocateNetBufferSGList 関数 (ndis.h)

注意

ARM および ARM64 プロセッサの場合、NDIS ドライバー ライターは、NDIS 散布図/収集 DMA の代わりに WDF DMA または WDM DMA を使用することを強くお勧めします。

WDF DMA の詳細については、「KMDF ドライバーでの DMA 操作の処理」を参照してください。

WDM DMA の詳細については、ドライバーの入力/出力の管理の の DMA 関連の子トピックを参照してください。

バス マスター ミニポート ドライバーは、NdisMAllocateNetBufferSGList 関数を呼び出して、NET_BUFFER 構造体に関連付けられているネットワーク データの散布図/収集リストを取得します。

構文

NDIS_STATUS NdisMAllocateNetBufferSGList(
  [in]           NDIS_HANDLE NdisMiniportDmaHandle,
  [in]           PNET_BUFFER NetBuffer,
  [in]           PVOID       Context,
  [in]           ULONG       Flags,
  [in, optional] PVOID       ScatterGatherListBuffer,
  [in]           ULONG       ScatterGatherListBufferSize
);

パラメーター

[in] NdisMiniportDmaHandle

DMA リソースを管理するために NDIS が使用するコンテキスト領域へのハンドル。 呼び出し元は、このハンドルを呼び出して取得しました。NdisMRegisterScatterGatherDma 関数を します。

[in] NetBuffer

NET_BUFFER構造体へのポインター。 NdisMAllocateNetBufferSGList 、このNET_BUFFER構造体に関連付けられているネットワーク データの散布図/収集リストを割り当てます。 散布図/収集リストは、関連付けられた NET_BUFFER_DATA 構造体の CurrentMdl メンバーで指定された MDL の先頭からデータから生成されます。

[in] Context

呼び出し元が作成したコンテキスト領域へのポインター。 HAL は、HAL が散布図/収集リストを作成した後 ミニポートProcessSGList にこのポインターを渡します。 呼び出し元は、独自の目的でこのコンテキスト領域を使用できます。

[in] Flags

OR 操作と組み合わせることができる NDIS フラグ。 すべてのフラグをクリアするには、このメンバーを 0 に設定します。 この関数は、次のNDIS_SG_LIST_WRITE_TO_DEVICEフラグをサポートします。設定されている場合は、DMA 転送の方向がNET_BUFFERからデバイスに送信されていることを示します。 NDIS_SG_LIST_WRITE_TO_DEVICEが明確な場合、転送はデバイスから行われます。 DMA 操作がNET_BUFFERからデバイスにデータを転送するときに、ミニポート ドライバーは、送信パスにこのフラグを設定する必要があります。 デバイスから事前に割り当てられたNET_BUFFERに DMA 操作を実行するミニポート ドライバー (たとえば、受信操作中に、チムニー オフロード対応 NIC) は、このフラグをクリアする必要があります。

[in, optional] ScatterGatherListBuffer

NULL しない場合、ScatterGatherListBuffer は、呼び出し元が散布図/収集リストを保持するために割り当てる記憶域へのポインターを指定します。 NULL 場合、NDIS は散布図/収集リストの記憶域を割り当てます。

[in] ScatterGatherListBufferSize

ScatterGatherListBuffer パラメーターが NULL されていない場合、ScatterGatherListBufferSize は、散布図/収集リストを含むバッファーのサイズを指定します。 このサイズが小さすぎる場合、NDIS は記憶域を分散/収集リストに割り当てます。 ScatterGatherListBuffer パラメーターが NULL 場合、このパラメーターは使用されません。

戻り値

NdisMAllocateNetBufferSGList は、次のいずれかを返します。

リターン コード 形容
NDIS_STATUS_SUCCESS
NdisMAllocateNetBufferSGList 、指定したNET_BUFFER構造体の散布図/収集リストが正常に作成されました。
NDIS_STATUS_RESOURCES
リソースが不足しているため、NdisMAllocateNetBufferSGList 失敗しました。

備考

NDIS バス マスター ミニポート ドライバーは、ndisMAllocateNetBufferSGList から を呼び出します。 ミニポートSendNetBufferLists 関数です。 ミニポート ドライバーは、NdisMAllocateNetBufferSGList、散布図/収集リストを取得する必要がある NET_BUFFER 構造体ごとに 1 回呼び出します。

ミニポート ドライバーが NdisMAllocateNetBufferSGList 呼び出すと、NDIS は HAL を呼び出して散布図/収集リストを作成します。 HAL は、散布図/収集リストをビルドした後、ミニポート ドライバーが呼び出すことによって登録 ミニポートProcessSGList 関数を呼び出します。NdisMRegisterScatterGatherDma します。

HAL は、ndisMAllocateNetBufferSGList から NDIS戻る前または後 ミニポートProcessSGList を呼び出すことができます。 ミニポート ドライバーは、HAL がミニポートProcessSGList 呼び出すまで、散布図/収集リストにアクセスしようとしないでください。

システム のパフォーマンスを向上させるために、ミニポート ドライバーは、NdisMAllocateNetBufferSGList ScatterGatherListBuffer パラメーターで使用するためのバッファー事前割り当てする必要があります。 NDIS は、ミニポート ドライバーが NdisMRegisterScatterGatherDma 呼び出すときに、DmaDescription パラメーターの ScatterGatherListSize メンバーのバッファーに推奨されるサイズを提供します。 ミニポート ドライバーは、NdisMAllocateNetBufferSGList 呼び出すときに、ScatterGatherListBufferSize パラメーター内のバッファーのサイズを指定します。

ミニポート ドライバーが ScatterGatherListBuffer パラメーターにバッファーを指定する場合でも、NDIS はバッファーを割り当てる可能性があります。 これは、指定されたバッファーが小さすぎて散布図/収集リストを保持できない場合に発生する可能性があります。 したがって、ドライバー ライターは、ScatterGatherListBuffer パラメーターに指定されたバッファーに散布図/収集リストが含まれているとは想定しないでください。 HAL は、ミニポート ドライバーのミニポート ドライバーの ミニポートProcessSGList 関数への正しい散布図/収集リスト ポインターを渡します。

システム パフォーマンスを向上させるために、関連する NET_BUFFER_DATA 構造体の CurrentMdl メンバーで指定された MDL の先頭から、散布図/収集リストがネットワーク データから生成されます。 SG リスト内のネットワーク データの開始は、関連付けられたNET_BUFFER_DATA構造体の CurrentMdlOffset メンバーで指定された値によって、SG リストの先頭からオフセットされます。

ミニポート ドライバーは、NdisMFreeNetBufferSGList 関数を呼び出して、散布図/収集リストを解放する必要があります。

必要条件

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

関連項目

ミニポートProcessSGList

ミニポートSendNetBufferLists

NDIS 散布図/DMA の収集

NET_BUFFER

NET_BUFFER_DATA

NdisMFreeNetBufferSGList

NdisMRegisterScatterGatherDma