NdisMAllocateSharedMemoryAsyncEx 関数 (ndis.h)
注意事項
ARM および ARM64 プロセッサの場合、NDIS ドライバー ライターは、NDIS 散布/収集 DMA の代わりに WDF DMA または WDM DMA を使用することを強くお勧めします。
WDF DMA の詳細については、「 KMDF ドライバーでの DMA 操作の処理」を参照してください。
WDM DMA の詳細については、「 ドライバーの入出力の管理」の DMA 関連の子トピックを参照してください。
ミニポート ドライバーは、 NdisMAllocateSharedMemoryAsyncEx 関数を呼び出して、ドライバーとそのバス マスター DMA NIC の間で共有される追加のメモリを割り当てます。通常、ミニポート ドライバーが使用可能な NIC 受信バッファーで不足しているときに実行されます。
構文
NDIS_STATUS NdisMAllocateSharedMemoryAsyncEx(
[in] NDIS_HANDLE MiniportDmaHandle,
[in] ULONG Length,
[in] BOOLEAN Cached,
[in] PVOID Context
);
パラメーター
[in] MiniportDmaHandle
NDIS が DMA リソースの管理に使用するコンテキスト領域へのハンドル。 呼び出し元は、 を呼び出してこのハンドルを取得しました。 NdisMRegisterScatterGatherDma 関数。
[in] Length
割り当てるバイト数。
[in] Cached
このパラメーターは無視されます (キャッシュされたメモリは常に x86 および x64 システムで使用されます)。
[in] Context
ミニポートSharedMemoryAllocateComplete 関数が呼び出されたときに渡されるドライバーによって決定されたコンテキストへのポインター。
戻り値
NdisMAllocateSharedMemoryAsyncEx は 、次のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
NDIS は 、MiniportSharedMemoryAllocateComplete 関数を呼び出し、割り当てられた共有メモリについて説明する情報を提供します。 共有メモリの割り当てが失敗した場合、NDIS は MiniportSharedMemoryAllocateComplete を呼び出し、 NULL ポインターを渡します。 |
|
現時点では、要求されたメモリを割り当てませんでした。 NdisMAllocateSharedMemoryAsyncEx がこの状態を返した場合、システム リソースが使用可能になったかどうかに応じて、同じパラメーターを持つ後続の呼び出しが成功する可能性があります。 |
注釈
このようなミニポート ドライバーは、通常、受信転送に使用できる共有メモリ バッファーの数を追跡するために 1 つ以上の状態変数を保持します。 使用可能なバッファーの数がドライバーによって決定された低に達すると、ミニポート ドライバーは NdisMAllocateSharedMemoryAsyncEx を呼び出して、共有メモリにバッファー領域を割り当てます。 使用可能なバッファーの数がドライバーによって決定された高に上昇すると、ミニポート ドライバーは NdisMFreeSharedMemory を 1 回以上呼び出して、その前の動的割り当てを解放します。
通常、このようなミニポート ドライバーは、NIC が削除されるまで NdisMAllocateSharedMemory で割り当てられたその MiniportInitializeEx 関数の共有メモリのブロックを保持します。 NIC が削除されると、NDIS はミニポート ドライバーの MiniportHaltEx 関数を 呼び出します。 この割り当ては、NIC を介した転送の平均需要を処理するのに十分です。
ミニポート ドライバーは、割り当てることができる共有メモリの量に制限を設定する必要があります。 この制限はドライバー固有であり、ドライバーがバッファーを使い果たさないように十分に高くする必要があります。 過剰に高い制限を設定しないでください。これにより、共有メモリが無駄に消費され、システムのパフォーマンスが低下する可能性があります。
NdisMAllocateSharedMemoryAsyncEx または NdisMAllocateSharedMemory を呼び出すミニポート ドライバーは、NIC が削除されたときに、NdisMFreeSharedMemory への 1 つ以上の呼び出しで未処理のすべての割り当てを解放する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | ndis.h (Ndis.h を含む) |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | Irql_Gather_DMA_Function(ndis) |