次の方法で共有


VM キューの解放

受信キューを解放するために、基になるドライバーは、OID_RECEIVE_FILTER_FREE_QUEUE セット OID 要求を発行します。 この NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには、タイプ NDIS_RECEIVE_QUEUE_ID のキュー識別子を持つ NDIS_RECEIVE_QUEUE_FREE_PARAMETERS 構造体へのポインターが含まれています。

OID_RECEIVE_FILTER_FREE_QUEUE は、OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID を使用して、基になるドライバーが割り当てた受信キューを解放します。 受信キューの割り当てについての詳細は、「VM キューの割り当て」を参照してください。

注:NDIS_DEFAULT_RECEIVE_QUEUE_ID のキュー識別子を持つ既定のキューは常に割り当てられ、解放できません。

基になるドライバーは、キューを解放する前に、キューに設定されているすべてのフィルターを解放する必要があります。 また、基になるドライバーは、NdisCloseAdapterEx 関数を呼び出してネットワーク アダプターへのバインドを閉じる前に、ネットワーク アダプターに割り当てたすべての受信キューを解放する必要があります。 NDIS は、ミニポート ドライバーの MiniportHaltEx 関数を呼び出す前に、ネットワーク アダプターに割り当てられているすべてのキューを解放します。

ミニポート ドライバーは、キューを解放する要求を受信すると、次の処理を行います:

  • キューに関連付けられている共有メモリ リソースへの DMA を直ちに停止する必要があります。

  • DMA が停止したことを示す状態表示を生成します。

  • キューに関連付けられている未処理の NET_BUFFER_LIST 構造体がすべて返されるのを待ちます。

  • 関連付けられている共有メモリとハードウェア リソースを解放します。

ミニポート ドライバーは、OID_RECEIVE_FILTER_FREE_QUEUE セット要求を受信すると、キューは DMA 停止状態となる必要があり、キュー上の DMA は停止され、ミニポート ドライバーは、NDIS_STATUS_RECEIVE_QUEUE_STATE 状態表示を使用して状態の変化を示す必要があります。 キューの状態の詳細については、キューの状態と操作を参照してください。

ミニポート ドライバーが NDIS_STATUS_RECEIVE_QUEUE_STATE 状態表示を発行した後、関連付けられている共有メモリを解放する前に、保留中のすべての受信インジケーターが完了するまで待機する必要があります。 共有メモリーの解放の詳細については、共有メモリー リソースの割り当てを参照してください。