受信キューを解放するために、上位にあるドライバーは、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 は、ミニポート ドライバーの ミニポートHaltEx 関数を呼び出す前に、ネットワーク アダプターに割り当てられているすべてのキューを解放します。
ミニポート ドライバーは、キューを解放する要求を受信すると、次の処理を行います。
キューに関連付けられている共有メモリ リソースへの DMA を直ちに停止する必要があります。
DMA が停止中であることを示すステータスインディケータを生成します。
キューに関連付けられている未処理の NET_BUFFER_LIST 構造体がすべて返されるのを待ちます。
関連付けられている共有メモリとハードウェア リソースを解放します。
ミニポート ドライバーが OID_RECEIVE_FILTER_FREE_QUEUE セット要求を受信すると、そのキューは DMA の停止状態に入る必要があります。これにより、キューの DMA が停止し、ミニポート ドライバーは NDIS_STATUS_RECEIVE_QUEUE_STATE 状態表示を使用して状態の変化を示す必要があります。 キューの状態の詳細については、「キューの状態と操作の 」を参照してください。
ミニポート ドライバーが NDIS_STATUS_RECEIVE_QUEUE_STATE 状態表示を発行した後、関連付けられている共有メモリを解放する前に、保留中のすべての受信インジケーターが完了するまで待機する必要があります。 共有メモリの解放の詳細については、「共有メモリ リソースの割り当て 」を参照してください。