若要配置具有初始組態參數的佇列,上層驅動程式會發出 OID_RECEIVE_FILTER_ALLOCATE_QUEUE 方法 OID 要求。 InformationBuffer 成員在 NDIS_OID_REQUEST 結構中,最初包含一個指向 NDIS_RECEIVE_QUEUE_PARAMETERS 結構的指標。 在 OID 方法請求成功返回後,NDIS_OID_REQUEST 結構的 InformationBuffer 成員包含一個指向 NDIS_RECEIVE_QUEUE_PARAMETERS 結構的指標,該結構具有新的佇列識別符和 MSI-X 表格項。
NDIS_RECEIVE_QUEUE_PARAMETERS 結構體用於 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 和 OID_RECEIVE_FILTER_QUEUE_PARAMETERS OID。 如需 VM 佇列參數的詳細資訊,請參閱 取得和更新 VM 佇列參數。
上層驅動程式會使用下列佇列設定參數,初始化 NDIS_RECEIVE_QUEUE_PARAMETERS 結構:
佇列類型(NdisReceiveQueueTypeVMQueue 來自 NDIS_RECEIVE_QUEUE_TYPE 列舉)。
佇列的處理器親和性。
佇列名稱和虛擬機名稱。
lookahead-split 參數。
注意 從 NDIS 6.30 開始,不再支援將封包數據分割成個別的前視緩衝區。
Note 上層驅動程式可以在 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 會在 QueueId 結構 NDIS_RECEIVE_QUEUE_PARAMETERS 的成員中指派佇列標識符,並將方法要求傳遞至迷你埠驅動程式。 迷你埠驅動程式會在 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 佇列。