次の方法で共有


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

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

[in] Length

割り当てるバイト数。

[in] Cached

このパラメーターは無視されます (キャッシュされたメモリは常に x86 および x64 システムで使用されます)。

[in] Context

呼び出されたときに ミニポートSharedMemoryAllocateComplete 関数に渡されるドライバーによって決定されたコンテキストへのポインター。

戻り値

NdisMAllocateSharedMemoryAsyncEx は、次のいずれかを返すことができます。

リターン コード 形容
NDIS_STATUS_PENDING
NDIS は、ミニポートSharedMemoryAllocateComplete 関数を呼び出し、割り当てられた共有メモリを説明する情報を提供します。 共有メモリの割り当てが失敗した場合、NDIS はミニポートSharedMemoryAllocateComplete 呼び出し、null ポインター 渡します。
NDIS_STATUS_FAILURE
現時点では、要求されたメモリを割り当てませんでした。 NdisMAllocateSharedMemoryAsyncEx がこの状態を返した場合、システム リソースが使用可能になったかどうかに応じて、同じパラメーターを持つ後続の呼び出しが成功する可能性があります。

備考

ミニポート ドライバーは既に NdisMRegisterScatterGatherDma を呼び出しているか、または ndisMRegisterDmaChannel して、NdisMAllocateSharedMemoryAsyncEx 呼び出す前に、散布図/収集 DMA チャネルを初期化する必要があります。
 
バス マスター DMA NIC のドライバーは、共有メモリ 動的に割り当てるために NdisMAllocateSharedMemoryAsyncEx を呼び出します。 このようなドライバーでは、初期化中に共有メモリ領域も割り当てられます。 これらのドライバーは、高いネットワーク トラフィックが既存の共有メモリ領域に過剰な要求を行うときに、転送操作に動的に割り当てられた共有メモリを使用します。

このようなミニポート ドライバーは通常、受信転送に使用できる共有メモリ バッファーの数を追跡する 1 つ以上の状態変数を保持します。 使用可能なバッファーの数がドライバーによって決定された低に達すると、ミニポート ドライバーは NdisMAllocateSharedMemoryAsyncEx を呼び出して、共有メモリにバッファー領域を割り当てます。 使用可能なバッファーの数がドライバーによって決定された高に上昇すると、ミニポート ドライバーは、その前の動的割り当てを解放する 1 回以上 NdisMFreeSharedMemory を呼び出します。

通常、このようなミニポート ドライバーは、NIC が削除されるまで、NdisMAllocateSharedMemory で割り当てられた ミニポートInitializeEx 関数の共有メモリのブロックを保持します。 NIC が削除されると、NDIS はミニポート ドライバーの ミニポートHaltEx 関数を呼び出します。 この割り当ては、NIC を介した転送の平均需要を処理するのに十分です。

ミニポート ドライバーは、割り当てることができる共有メモリの量に制限を設定する必要があります。 この制限はドライバー固有であり、ドライバーがバッファーを使い果たさないように十分に高くする必要があります。 過剰に高い制限を設定しないでください。これにより、共有メモリが無駄に消費され、システムのパフォーマンスが低下する可能性があります。

NdisMAllocateSharedMemoryAsyncEx または NdisMAllocateSharedMemory 呼び出すミニポート ドライバーは、NIC が削除されたときに、NdisMFreeSharedMemory への 1 つ以上の呼び出しで未処理のすべての割り当てを解放する必要があります。

必要条件

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

関連項目

ミニポートHaltEx

ミニポートInitializeEx

ミニポートSharedMemoryAllocateComplete

NdisMAllocateSharedMemory

NdisMFreeSharedMemory

NdisMRegisterDmaChannel

NdisMRegisterScatterGatherDma