次の方法で共有


キューの状態と操作

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

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

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

オン
設定状態では、キューには少なくとも 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 OID 要求を受け取りました。 DMA が停止し、ドライバーが (NDIS_STATUS_RECEIVE_QUEUE_STATE を使用して) DMA 停止ステータス指示を発行すると、ドライバーは解放状態になります。

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

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

イベント \ 状態 Undefined Allocated Set 実行中 一時停止 DMA を停止する 解放

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - メソッド (設定)

Allocated

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

Allocated

Set

実行中

一時停止

OID_RECEIVE_FILTER_QUEUE_PARAMETERS - 設定要求

Allocated

Set

実行中

一時停止

OID_RECEIVE_FILTER_SET_FILTER - メソッド (設定) 要求

設定

設定

実行中

実行中

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

Allocated

一時停止

OID_RECEIVE_FILTER_CLEAR_FILTER - 設定要求 (最後のフィルター以外)

Set

実行中

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

Allocated

Set

実行中

一時停止

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

Set

実行中

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - メソッド (設定) 要求

一時停止

実行中

パケットの受信

実行中

OID_RECEIVE_FILTER_FREE_QUEUE 設定要求

DMA を停止する

DMA を停止する

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

解放

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

Undefined

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

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

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

OID_RECEIVE_FILTER_SET_FILTER - メソッド (設定) 要求
上位のドライバーは、キューにフィルターを設定します。 上位のドライバーが OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID を送信していない場合、キューは設定状態になります。 それ以外の場合、キューは実行中状態になります。 キューにフィルターを設定する方法の詳細については、「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 停止ステータス指示を発行し、ドライバーが解放状態に入ります。 未処理の受信通知がすべて完了し、キュー リソースが解放されると、キューは未定義になります。