共有メモリ リソース割り当て
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 のコンテキストで共有メモリを解放します。 ミニポート ドライバーは、MiniportHaltEx 関数のコンテキストで既定のキューに割り当てられた共有メモリを解放します。