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