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 受信キューの解放を要求する場合は、以下の手順に従います。
ネットワーク アダプターは、受信キューに関連付けられている受信バッファーへのデータの DMA 転送を停止します。その後、キューは DMA 停止状態に入る必要があります。 受信キューに最後に設定されたフィルターをクリアするための OID_RECIVE_FILTER_CLEAR_FILTER OID 要求を受信したときに、ネットワーク アダプターが DMA アクティビティを停止した可能性があります。
ミニポート ドライバーは、NDIS_STATUS_RECEIVE_QUEUE_STATE ステータス表示を生成し、QueueState メンバーを NDIS_RECEIVE_QUEUE_STATE 構造体に NdisReceiveQueueOperationalStateDmaStopped を設定して、DMA 転送が停止したことを NDIS に通知します。
ミニポート ドライバーは、そのキューに指示されたすべての受信パケットがミニポート ドライバーに返されるのを待ちます。
ミニポート ドライバーは、NdisFreeSharedMemory を呼び出すことによって、キューに関連付けられているネットワーク アダプターの受信バッファーに割り当てられたすべての共有メモリを解放します。
ミニポートドライバーは、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 を含む) |
関連項目
NDIS_RECEIVE_QUEUE_FREE_PARAMETERS