次の方法で共有


OID_RECEIVE_FILTER_FREE_QUEUE

NDIS プロトコル ドライバーは、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 セット要求は、NDIS 6.20 以降のミニポート ドライバーでは省略可能です。 これは、仮想マシン キュー インターフェイスをサポートするミニポート ドライバーには必須のものです。

上部のドライバーは、OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID を発行して受信キューを割り当てた後、OID_RECEIVE_FILTER_FREE_QUEUE OID を発行して受信キューを解放します。

NDIS がミニポート ドライバーに VMQ 受信キューの解放を要求する場合は、以下の手順に従います。

  1. ネットワーク アダプターは、受信キューに関連付けられている受信バッファーへのデータの DMA 転送を停止します。その後、キューは DMA 停止状態に入る必要があります。 受信キューに最後に設定されたフィルターをクリアするための OID_RECIVE_FILTER_CLEAR_FILTER OID 要求を受信したときに、ネットワーク アダプターが DMA アクティビティを停止した可能性があります。

  2. ミニポート ドライバーは、NDIS_STATUS_RECEIVE_QUEUE_STATE ステータス表示を生成し、QueueState メンバーを NDIS_RECEIVE_QUEUE_STATE 構造体に NdisReceiveQueueOperationalStateDmaStopped を設定して、DMA 転送が停止したことを NDIS に通知します。

  3. ミニポート ドライバーは、そのキューに指示されたすべての受信パケットがミニポート ドライバーに返されるのを待ちます。

  4. ミニポート ドライバーは、NdisFreeSharedMemory を呼び出すことによって、キューに関連付けられているネットワーク アダプターの受信バッファーに割り当てられたすべての共有メモリを解放します。

  5. ミニポートドライバーは、OID_RECEIVE_FILTER_FREE_QUEUE OID 要求を完了し、受信キューを解放します。

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

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

状態コードを返す

ミニポート ドライバーの MiniportOidRequest 関数は、この要求に対して次のいずれかの値を返します。

用語 説明

NDIS_STATUS_SUCCESS

ミニポート ドライバーが要求を正常に完了しました。

NDIS_STATUS_PENDING

ミニポート ドライバーは、非同期的に要求を完了します。 ミニポート ドライバーは、すべての処理を完了した後、NdisMOidRequestComplete 関数を呼び出して要求を成功させ、Status パラメーターの NDIS_STATUS_SUCCESS を渡す必要があります。

NDIS_STATUS_NOT_ACCEPTED

ミニポート ドライバーがリセット中です。

NDIS_STATUS_REQUEST_ABORTED

ミニポート ドライバーが要求の処理を停止しました。 たとえば、NDIS は、MiniportResetEx 関数を呼び出しました。

NDIS は、この要求に対して次のいずれかの状態コードを返します。

状態コード 説明

NDIS_STATUS_SUCCESS

要求されたキューが正常に解放されました。

NDIS_STATUS_PENDING

要求の完了が保留中です。 NDIS は、要求が完了した後、呼び出し元の OID 要求完了ハンドラーに最終的な状態コードと結果を渡すことになります。

NDIS_STATUS_INVALID_PARAMETER

キュー識別子が無効です。

NDIS_STATUS_INVALID_LENGTH

情報バッファーが短すぎます。 NDIS は、NDIS_OID_REQUEST 構造体の DATA.METHOD_INFORMATION.BytesNeeded メンバーを必要な最小バッファー サイズに設定します。

要件

バージョン

NDIS 6.20 以降でサポートされています。

ヘッダー

Ntddndis.h (Ndis.h を含む)

関連項目

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE