次の方法で共有


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_STATUS_PENDING
NDIS は 、MiniportSharedMemoryAllocateComplete 関数を呼び出し、割り当てられた共有メモリについて説明する情報を提供します。 共有メモリの割り当てが失敗した場合、NDIS は MiniportSharedMemoryAllocateComplete を呼び出し、 NULL ポインターを渡します。
NDIS_STATUS_FAILURE
現時点では、要求されたメモリを割り当てませんでした。 NdisMAllocateSharedMemoryAsyncEx がこの状態を返した場合、システム リソースが使用可能になったかどうかに応じて、同じパラメーターを持つ後続の呼び出しが成功する可能性があります。

注釈

メモミニポート ドライバーは、NdisMAllocateSharedMemoryAsyncEx を呼び出す前に、分散/収集 DMA チャネルを初期化するために、NdisMRegisterScatterGatherDma または NdisMRegisterDmaChannel を既に呼び出している必要があります。
 
バス マスター DMA NIC のドライバーは、共有メモリを動的に割り当てるため に 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)

こちらもご覧ください

MiniportHaltEx

MiniportInitializeEx

MiniportSharedMemoryAllocateComplete

NdisMAllocateSharedMemory

NdisMFreeSharedMemory

NdisMRegisterDmaChannel

NdisMRegisterScatterGatherDma