共用方式為


佇列狀態和作業

針對每個佇列,網路適配器必須支援下列這些操作狀態:

未定義
佇列未配置。 若要分配佇列,上層驅動程式會傳送 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 要求。

已配置
已配置 狀態是佇列的初始狀態。 當佇列處於已配置狀態時,上層驅動程式通常會使用 OID_RECEIVE_FILTER_SET_FILTER OID 在佇列上設定篩選,或使用 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID 要求完成佇列分配。


Set 狀態中,佇列至少有一個已配置篩選,但上層驅動程式還未傳送 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 停止,且驅動程式已發出 DMA 停止狀態指示(NDIS_STATUS_RECEIVE_QUEUE_STATE),驅動程式會進入釋放狀態。

釋放
釋放 狀態中,迷你埠驅動程式會完成停止佇列傳送和接收作業所需的作業,並釋放相關聯的資源。 完成所有未處理的接收指示之後,佇列就會被刪除,而佇列狀態為未定義。

在下表中,標題是佇列狀態。 主要事件會列在第一欄中。 數據表中的其他條目會指定佇列在某一狀態中事件發生後所進入的下一狀態。 空白項目代表無效的事件與狀態組合。

事件 \ 狀態 未定義 分配 設定 跑步 暫停 停止 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 - 方法 (set) 要求
一個上層驅動程式在佇列上設定了一個篩選器。 如果上層驅動程式尚未傳送 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID,佇列會處於設定狀態。 否則,佇列將處於執行狀態。 如需在佇列上設定篩選的詳細資訊,請參閱 設定和清除 VMQ 篩選

OID_RECEIVE_FILTER_CLEAR_FILTER - 設定要求
上層驅動程式清除了佇列中的篩選器。 如果在執行中的佇列上清除了最後一個篩選器,則可以停止 DMA;接收指示將會停止,如果有任何已接收的數據,則應清除佇列。 如需清除佇列篩選的詳細資訊,請參閱 設定和清除 VMQ 篩選

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - 方法(set)請求
上層驅動程式已完成佇列分配。 如果佇列上設定了篩選條件,則會處於 [執行中] 狀態,並且可以開始接收指示。 如需完成佇列配置的詳細資訊,請參閱 配置和釋放 VM 佇列

接收封包
迷你埠驅動程式只能在佇列處於執行狀態時指示接收的封包。 如需指示佇列已接收資料的詳細資訊,請參閱 VMQ 傳送和接收作業

OID_RECEIVE_FILTER_FREE_QUEUE 設置請求。
上層驅動程序釋放了佇列。 驅動程式會發出 DMA 停止狀態的指示(NDIS_STATUS_RECEIVE_QUEUE_STATE),然後驅動程式進入釋放狀態。 當所有未處理的接收指示都已完成且佇列資源已釋出時,佇列就會未定義。