NdisMAllocateNetBufferSGList 関数 (ndis.h)
注意
ARM および ARM64 プロセッサの場合、NDIS ドライバー ライターは、NDIS 散布図/収集 DMA の代わりに WDF DMA または WDM DMA を使用することを強くお勧めします。
WDF DMA の詳細については、「KMDF ドライバーでの 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 は、次のいずれかを返します。
リターン コード | 形容 |
---|---|
|
NdisMAllocateNetBufferSGList 、指定したNET_BUFFER構造体の散布図/収集リストが正常に作成されました。 |
|
リソースが不足しているため、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 の
NDIS 散布図/DMA の収集
NdisMFreeNetBufferSGList の
NdisMRegisterScatterGatherDma の