共用方式為


配置 VM 佇列

若要配置具有一組初始組態參數的佇列,過度配置驅動程式會發出 OID_RECEIVE_FILTER_ALLOCATE_QUEUE 方法 OID 要求。 NDIS_OID_REQUEST結構的InformationBuffer成員一開始包含NDIS_RECEIVE_QUEUE_PARAMETERS結構的指標。 從 OID 方法要求成功傳回之後,NDIS_OID_REQUEST結構的InformationBuffer成員會包含具有新佇列識別碼和 MSI-X 資料表專案之NDIS_RECEIVE_QUEUE_PARAMETERS結構的指標。

NDIS_RECEIVE_QUEUE_PARAMETERS結構用於OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 和OID_RECEIVE_FILTER_QUEUE_PARAMETERS OID。 如需 VM 佇列參數的詳細資訊,請參閱 取得和更新 VM 佇列參數

過度處理驅動程式會使用下列佇列組態參數,初始化 NDIS_RECEIVE_QUEUE_PARAMETERS 結構:

  • 佇列類型 (NdisReceiveQueueTypeVMQueueNDIS_RECEIVE_QUEUE_TYPE enumeration.)

  • 佇列的處理器親和性。

  • 佇列名稱和虛擬機器名稱。

  • lookahead-split 參數。

    注意 從 NDIS 6.30 開始,不再支援將封包資料分割成個別的外觀緩衝區。

注意過度配置驅動程式可以在NDIS_RECEIVE_QUEUE_PARAMETERS結構的Flags成員中設定NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION和NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED旗標。 其他旗標不會用於佇列配置。

當 NDIS 收到 OID 要求來配置接收佇列時,它會驗證佇列參數。 在 NDIS 配置必要的資源和佇列識別碼之後,它會將 OID 要求提交至基礎迷你埠驅動程式。 佇列識別碼對相關聯的網路介面卡而言是唯一的。

如果迷你埠驅動程式可以成功為接收佇列配置必要的軟體和硬體資源,則會完成 OID 要求並具有成功狀態。

在 NDIS 將 OID 要求傳送至迷你埠驅動程式之前,NDIS 會在NDIS_RECEIVE_QUEUE_PARAMETERS結構的QueueId成員中指派佇列識別碼,並將方法要求傳遞至迷你埠驅動程式。 迷你埠驅動程式會在 MSIXTableEntry 成員中提供 MSI-X 資料表專案。

迷你埠驅動程式必須保留已配置接收佇列的佇列識別碼。 NDIS 會針對迷你埠驅動程式的後續呼叫使用接收佇列的佇列識別碼,在接收佇列上設定接收篩選器、變更接收佇列參數,或釋放接收佇列。

注意 預設佇列 (佇列識別碼零) 一律會配置,而且無法釋放。

例如,過度處理驅動程式必須使用 NDIS 在後續 OID 要求中提供的佇列識別碼,以修改佇列參數或釋放佇列。 佇列識別碼也會包含在與佇列相關聯之所有 NET_BUFFER_LIST 結構的 OOB 資料中。 驅動程式會使用 NET_BUFFER_LIST_RECEIVE_QUEUE_ID 宏來擷取NET_BUFFER_LIST結構中的佇列識別碼。

注意 通訊協定驅動程式可以在成功配置佇列之後,以及刪除佇列之前,隨時設定 VMQ 篩選器。

通訊協定驅動程式會發出 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 方法 OID 要求,以完成佇列配置。 迷你埠驅動程式可以在配置完成時配置共用記憶體和其他資源。 如需配置共用記憶體資源的詳細資訊,請參閱 共用記憶體資源配置

在迷你埠驅動程式收到OID_RECEIVE_FILTER_QUEUE_ALLOCATION OID 要求並成功處理之後,佇列會處於 [已配置 ] 狀態。 如需佇列狀態的詳細資訊,請參閱 佇列狀態和作業

在過度配置驅動程式 (配置一或多個接收佇列,並選擇性地設定初始篩選) 之後,它必須發出 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 設定 OID 要求,以通知迷你埠驅動程式目前接收佇列的配置已完成。

如果該佇列上未設定任何篩選,迷你埠驅動程式就不得保留接收佇列中的任何封包。 如果佇列從未設定任何篩選,或清除所有篩選準則,佇列應該是空的,而且應該捨棄任何封包。 也就是說,它們不會指出驅動程式堆疊或保留在佇列中。

過度配置驅動程式會使用 OID_RECEIVE_FILTER_FREE_QUEUE OID 來釋放其配置的佇列。 如需釋放佇列的詳細資訊,請參閱 釋放 VM 佇列