次の方法で共有


キューの状態と操作

各キューについて、ネットワーク アダプターは次の一連の操作状態をサポートする必要があります。

未定義
キューが割り当てされていません。 キューを割り当てるために、基になるドライバーは 、OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 要求を送信します。

割り当て られた
割り当てられた状態は、キューの初期状態です。 キューが割り当て済み状態の場合、上にあるドライバーは通常、 OID_RECEIVE_FILTER_SET_FILTER OID を使用してキューにフィルターを設定するか、 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID 要求でキューの割り当てを完了します。

セット
Set 状態では、キューには少なくとも 1 つのフィルターが割り当てられていますが、上にあるドライバーがOID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID を送信していません。

ランニング
実行中の状態では、キューにフィルターが設定され、キューの割り当てが完了し、ミニポート アダプターがキューの受信パケットを示しています。

一時停止
一時停止状態では、ネットワーク アダプターはキューの受信したネットワーク データを示しません。 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID 要求の前にキューにフィルターが設定されていないか、キューに設定されたすべてのフィルターが、OID_RECEIVE_FILTER_CLEAR_FILTER OID 要求でクリアされました。

DMA が停止しました
DMA の停止状態では、ミニポート ドライバーは、OID_RECEIVE_FILTER_FREE_QUEUE OID 要求を受信しました。 DMA が停止し、ドライバーが ( NDIS_STATUS_RECEIVE_QUEUE_STATEで) DMA 停止状態の表示を発行すると、ドライバーは解放状態になります。

解放
解放状態では、ミニポート ドライバーは、キューの送受信操作を停止するために必要な操作を完了し、関連付けられているリソースを解放します。 未処理の受信通知がすべて完了すると、キューは削除され、キューは未定義になります。

表の見出しはキューの状態です。 メジャー イベントが最初の列に一覧表示されます。 テーブル内の残りのエントリでは、イベントが状態内で発生した後にキューが次に入る状態を指定します。 空白のエントリは、無効なイベント/状態の組み合わせを表します。

イベント \ 状態 未定義 割り当て られた オン ランニング 一時停止 DMA の停止 自由化

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - メソッド (設定)

割り当て られた

OID_RECEIVE_FILTER_QUEUE_PARAMETERS - メソッド(クエリ)要求

割り当て られた

オン

ランニング

一時停止

OID_RECEIVE_FILTER_QUEUE_PARAMETERS - 要求の設定

割り当て られた

オン

ランニング

一時停止

OID_RECEIVE_FILTER_SET_FILTER - メソッド (セット) 要求

オン

オン

ランニング

ランニング

OID_RECEIVE_FILTER_CLEAR_FILTER - リクエストの設定(最後のフィルター)

割り当て られた

一時停止

OID_RECEIVE_FILTER_CLEAR_FILTER - 設定要求 (最後のフィルターではない)

オン

ランニング

OID_RECEIVE_FILTER_ENUM_FILTERS - メソッド (クエリ要求)

割り当て られた

オン

ランニング

一時停止

OID_RECEIVE_FILTER_PARAMETERS - メソッド(クエリ)要求

オン

ランニング

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - メソッド(セット)要求

一時停止

ランニング

パケットの受信

ランニング

OID_RECEIVE_FILTER_FREE_QUEUEの設定要求

DMA の停止

DMA の停止

DMA は停止し、NDIS_STATUS_RECEIVE_QUEUE_STATE の状態指示が送信されました(注:割り当て済みまたは一時停止状態で DMA が既に停止されていた可能性があります)。

自由化

すべての受信通知が完了し、キュー リソースが解放される

未定義

手記 前の表に示すイベントには、状態の変更を生じないセカンダリ イベントがいくつか含まれています。 これらのセカンダリ イベントは、これらのイベントが有効な状態を指定するためにテーブルに含まれています。

プライマリ キュー イベントは次のように定義されます。

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - メソッド (セット) 要求
上位のドライバーがキューを割り当てた。 キューの割り当てについて詳しくは、「 VM キューの割り当てと解放」をご覧ください。

OID_RECEIVE_FILTER_SET_FILTER - 設定方法(セット)要求
上位ドライバーがキューにフィルターを設定しました。 上にあるドライバーが OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID を送信していない場合、キューは Set 状態になります。 それ以外の場合、キューは実行中の状態になります。 キューに対するフィルターの設定の詳細については、「 VMQ フィルターの設定とクリア」を参照してください。

OID_RECEIVE_FILTER_CLEAR_FILTER - リクエストを設定する
上位ドライバーがキューのフィルターを除去しました。 実行中のキューで最後のフィルターがクリアされた場合は、DMA を停止できます。受信通知が停止され、受信したデータがある場合はキューをクリアする必要があります。 キューのフィルターのクリアの詳細については、「 VMQ フィルターの設定とクリア」を参照してください。

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - メソッド(セット)リクエスト
上位のドライバーがキューの割り当てを完了しました。 キューにフィルターが設定されている場合は、実行中の状態になり、受信インジケーターを開始できます。 キューの割り当ての完了の詳細については、「 VM キューの割り当てと解放」を参照してください。

パケットの受信
ミニポート ドライバーは、実行中の状態にあるキューの受信パケットのみを示すことができます。 キューの受信データを示す方法の詳細については、「 VMQ の送受信操作」を参照してください。

OID_RECEIVE_FILTER_FREE_QUEUE要求を設定します。
上位のドライバーがキューを解放しました。 ドライバーは NDIS_STATUS_RECEIVE_QUEUE_STATE を用いた DMA 停止状態の通知を発行し、その後、ドライバーは Freeing 状態に入ります。 未処理の受信通知がすべて完了し、キュー リソースが解放されると、キューは未定義になります。