共用方式為


佇列狀態和作業

針對每個佇列,網路介面卡必須支援下列一組作業狀態:

定義
佇列未配置。 為了配置佇列,過度配置驅動程式會傳送 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 要求。

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

設置
[設定 ] 狀態中,佇列至少有一個已配置的篩選,但過度配置驅動程式尚未傳送 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) 時,驅動程式會進入 [釋放] 狀態。

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

在下表中,標題是佇列狀態。 主要事件列在第一個資料行中。 資料表中的其餘專案會指定佇列在事件發生在狀態內之後進入的下一個狀態。 空白專案代表不正確事件/狀態組合。

事件 \ 狀態 未定義 已配置 集合 執行中 已暫停 停止 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設定要求。
過度部署的驅動程式釋出佇列。 驅動程式會發出 DMA 停止狀態指示, (NDIS_STATUS_RECEIVE_QUEUE_STATE) ,驅動程式會進入 [釋放] 狀態。 當所有未完成的接收指示都已完成,且佇列資源已釋放時,佇列就會未定義。