次の方法で共有


共有メモリ リソースの割り当て

VM キューの共有メモリ リソースを割り当てるには、ミニポート ドライバーは NdisAllocateSharedMemory 関数を呼び出します。 たとえば、ミニポート ドライバーは、 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID を受信するときに共有メモリを割り当てます。 また、ミニポート ドライバーは、ネットワーク アダプターの初期化中に既定のキューの共有メモリを割り当てることができます。 キューの割り当てについて詳しくは、「 VM キューの割り当て」をご覧ください。

ミニポート ドライバーは、キューが解放されるまで、必要に応じて追加のメモリをキューに割り当てることができます。 キューの解放の詳細については、「 VM キューの解放」を参照してください。

NDIS_SHARED_MEMORY_PARAMETERS構造体は、共有メモリ割り当て要求の共有メモリ パラメーターを指定します。 ミニポート ドライバーは、 NdisAllocateSharedMemory 関数にこの構造体を渡します。 NDIS は、 NetAllocateSharedMemory 関数 (つまり、ALLOCATE_SHARED_MEMORY_HANDLERエントリ ポイント) にこの構造体を渡します。

ミニポート ドライバーは、共有メモリを割り当てるときに、次を指定します。

  • キュー識別子。

  • 共有メモリの長さ。

  • 共有メモリの使用方法。 たとえば、ミニポート ドライバーは、共有メモリを受信バッファーに使用する場合、 NdisSharedMemoryUsageReceive を指定します。

NDIS_SHARED_MEM_PARAMETERS_CONTIGOUS フラグが Flags メンバーに設定されていない場合は、連続していないメモリに含まれる分散収集リストで共有メモリを指定できます。

NDIS_SHARED_MEMORY_USAGE列挙体は、共有メモリの使用方法を指定します。 NDIS_SHARED_MEMORY_USAGE列挙体は、 NDIS_SHARED_MEMORY_PARAMETERS および NDIS_SCATTER_GATHER_LIST_PARAMETERS 構造体で使用されます。 VMQ 受信データ バッファーの共有メモリ パラメーターについては、「 受信バッファーの共有メモリ」を参照してください。

NdisAllocateSharedMemory 関数は、呼び出し元に次を提供します。

  • 割り当てられたメモリの仮想アドレス。

  • スキャッター・ギャザーリスト。

  • 「共有メモリ ハンドル」- 受信指示用。

  • 割り当てハンドル - 後でメモリを識別するために使用されます。

ミニポート ドライバーは、 NdisFreeSharedMemory 関数を呼び出して、キューの共有メモリを解放します。 ミニポート ドライバーが既定以外のキューの共有メモリを割り当てた場合は、キューを解放している間、 OID_RECEIVE_FILTER_FREE_QUEUE OID のコンテキストで共有メモリを解放します。 ミニポート ドライバーは、 ミニポートHaltEx 関数のコンテキストで既定のキューに割り当てられた共有メモリを解放します。