管理 Hyper-V 可延伸交換器運行時間數據

本主題描述 Hyper-V 可延伸交換器延伸模組的儲存和還原作業。 這些作業可讓擴充功能儲存及還原個別可延伸交換器網路適配器(NIC)的運行時間數據。 當具有可延伸交換器埠之網路適配器連線的 Hyper-V 子分割區正在停止或啟動時,就會執行這些作業。

儲存 Hyper-V 可延伸交換器運行時間數據

本節描述 Hyper-V 可延伸交換器擴充功能可以儲存個別網路適配器 (NIC) 執行時間數據的作業。 當具有可延伸交換器埠之網路適配器連線的 Hyper-V 子分割區停止或其狀態正在儲存時,就會執行這項作業。

處理OID_SWITCH_NIC_SAVE要求

當具有網路適配器連線至可延伸交換器埠的 Hyper-V 子分割已停止或儲存其狀態時,會通知 Hyper-V 可延伸交換器介面。 這會導致可延伸參數的通訊協定邊緣發出OID_SWITCH_NIC_SAVE可延伸交換器驅動程式堆疊的物件識別碼 (OID) 方法要求。 當可延伸交換器擴充功能收到此 OID 要求時,它可以為附加至子分割區的指定網路適配器連線儲存其運行時間數據。

OID_SWITCH_NIC_SAVE要求之NDIS_OID_REQUEST結構的 InformationBuffer 成員包含NDIS_SWITCH_NIC_SAVE_STATE結構的指標。 此結構是由可延伸交換器的通訊協定邊緣所配置,並以下列方式初始化:

  • 標頭成員會初始化為包含目前類型的 NDIS_SWITCH_NIC_SAVE_STATE 結構修訂。 大小會設定為完整緩衝區大小。

  • PortId 成員包含執行儲存作業之可延伸交換器埠的唯一標識碼。

當它收到 OID_SWITCH_NIC_SAVE 方法要求時,擴充功能會執行下列動作:

  1. 延伸模組會讀取 NDIS_SWITCH_NIC_SAVE_STATE 結構的 PortId 成員

  2. 如果延伸模組具有運行時間數據來儲存指定的 NIC,則會從 結構開頭的 SaveDataOffset 位元組開始,將其數據儲存在NDIS_SWITCH_NIC_SAVE_STATE結構中。 接著,擴充功能會使用 NDIS_STATUS_SUCCESS完成 OID 方法要求。

  3. 如果NDIS_SWITCH_NIC_SAVE_STATE結構未提供足夠的緩衝區來保存運行時間狀態,擴充功能會將方法結構的 BytesNeeded 字段設定為NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1加上保存數據所需的緩衝區數量,並使用 NDIS_STATUS_BUFFER_TOO_SHORT完成 OID。 OID 將會以所需的大小重新發出。

  4. 如果延伸模組沒有運行時間數據來儲存指定的 NIC,它必須呼叫 NdisFOidRequest 這會將 OID 方法要求轉送至可延伸交換器驅動程式堆疊中的基礎驅動程式。 如需此程式的詳細資訊,請參閱 在 NDIS 篩選驅動程式中篩選 OID 要求。

如果延伸模組有要儲存的運行時間埠數據,則必須遵循下列指導方針,以在NDIS_SWITCH_NIC_SAVE_STATE結構中儲存運行時間埠數據:

  1. 擴充功能會將 ExtensionId 成員設定為可唯一識別驅動程式的 GUID 值。

  2. 擴充功能會將 ExtensionFriendlyName 成員設定為驅動程式的名稱。

    注意 NDIS_SWITCH_EXTENSION_FRIENDLYNAME 數據類型是由 IF_COUNTED_STRING 結構所定義。 這個結構所定義的字串不必以 Null 結尾。 不過,字串的長度必須在這個 結構的 Length 成員中設定。 如果字串為 NULL 終止, Length 成員不得包含終止的 NULL 字元。

  3. 如果功能類別與儲存的運行時間數據相關聯,擴充功能會使用可唯一識別類別的 GUID 來設定 FeatureClassId

    注意 如果功能類別與儲存的運行時間數據無關,擴充功能會將 FeatureClassId 設定為零。

  4. 延伸模組會將運行時間數據複製到 SaveData 成員,並將 SaveDataSize 成員設定為運行時間數據的大小,以位元組為單位。

注意 此延伸模組不得變更NDIS_SWITCH_NIC_SAVE_STATE結構的 HeaderPortId 成員

OID_SWITCH_NIC_SAVE的 OID 方法要求最終會由可延伸交換器的基礎迷你埠邊緣處理。 一旦這個 OID 方法要求透過可延伸交換器驅動程式堆疊轉送至迷你埠驅動程序之後,迷你埠驅動程式就會使用 NDIS_STATUS_SUCCESS完成 OID 要求。 這會通知可延伸交換器的通訊協定邊緣,指出已查詢可延伸交換器驅動程式堆疊中的所有延伸模組,以取得運行時間埠數據。 擴充交換器的通訊協定邊緣接著發出 OID 集合要求 OID_SWITCH_NIC_SAVE_COMPLETE完成儲存作業。

處理OID_SWITCH_NIC_SAVE_COMPLETE要求

當具有可延伸交換器埠之網路適配器連線的 Hyper-V 子分割已暫停或其狀態正在儲存時,會通知 Hyper-V 可延伸交換器介面。 這會導致可延伸參數的通訊協定邊緣發出OID_SWITCH_NIC_SAVE可延伸交換器驅動程式堆疊的物件識別碼 (OID) 方法要求

當每個 Hyper-V 可延伸交換器延伸模組已儲存其運行時間數據時,可延伸交換器的通訊協定邊緣會通知基礎延伸模組儲存作業已完成。 通訊協定邊緣會發出OID_SWITCH_NIC_SAVE_COMPLETE擴充交換器驅動程式堆疊的 OID 集合要求,以執行此作業。

注意 當可延伸交換器網路適配器連線啟動運行時間儲存作業時,在發出OID_SWITCH_NIC_SAVE_COMPLETE要求之前,將不會執行相同網路適配器連線的另一個儲存作業。 不過,此時可能會儲存其他網路適配器連線的作業。

OID_SWITCH_NIC_SAVE_COMPLETE要求之NDIS_OID_REQUEST結構的 InformationBuffer 成員包含NDIS_SWITCH_NIC_SAVE_STATE結構的指標。 此結構是由可延伸交換器的通訊協定邊緣所配置。

當它收到 OID_SWITCH_NIC_SAVE_COMPLETEOID 集合要求時,擴充功能必須遵循下列指導方針:

  • 延伸模組不得修改 與 OID 要求相關聯的NDIS_SWITCH_NIC_SAVE_STATE 結構。

  • 延伸模組必須呼叫 NdisFOidRequest ,才能透過可延伸交換器擴充堆疊轉送此 OID 要求。 擴充功能不得讓 OID 要求失敗。

    注意 延伸模組應該監視此 OID 要求的完成狀態。 延伸模組會執行此動作來偵測儲存作業是否已順利完成。

OID_SWITCH_NIC_SAVE_COMPLETE的 OID 方法要求最終會由可延伸交換器的基礎迷你埠邊緣處理。 一旦迷你埠邊緣收到這個 OID 方法要求之後,它會使用 NDIS_STATUS_SUCCESS 完成 OID 要求。 這會通知可延伸交換器通訊協定邊緣,可延伸交換器驅動程式堆疊中的所有延伸模組都已完成儲存作業。

還原 Hyper-V 可延伸交換器運行時間數據

當具有可延伸交換器埠之網路適配器連線的 Hyper-V 子分割區從暫停繼續時,會通知 Hyper-V 可延伸交換器介面。 這會導致可延伸交換器的通訊協定邊緣發出OID_SWITCH_NIC_RESTORE可延伸交換器驅動程式堆疊的物件標識碼 (OID) 集合要求。 當擴充功能收到此 OID 要求時,它可以針對子分割區所使用的可延伸交換器埠還原其運行時間數據。

OID_SWITCH_NIC_RESTORE要求之NDIS_OID_REQUEST結構的 InformationBuffer 成員包含NDIS_SWITCH_NIC_SAVE_STATE結構的指標。 此結構是由可延伸交換器的通訊協定邊緣所配置。

當它收到 OID_SWITCH_NIC_RESTOREOID 集合要求時,可延伸交換器擴充功能必須先判斷它是否擁有運行時間數據。 延伸模組會藉由將NDIS_SWITCH_NIC_SAVE_STATE 結構的ExtensionId成員與延伸模組用來識別本身的 GUID 值進行比較,來執行此作業。

如果延伸模組擁有可延伸交換器 NIC 的執行時間數據,它會以下列方式還原此資料:

  1. 延伸模組會將 SaveData 成員中的運行時間資料複製到驅動程式配置的記憶體。

    注意 NDIS_SWITCH_NIC_SAVE_STATE 結構的 PortId 成員可能與儲存運行時間數據時的 PortId 值不同。 如果在從一部主機即時移轉至另一個主機期間儲存運行時間數據,就可能發生此情況。 不過,即時移轉期間會保留可延伸交換器 NIC 的設定。 這可讓擴充功能使用新的 PortId 值,將運行時間數據還原至可延伸交換器 NIC。

  2. 延伸模組會使用 NDIS_STATUS_SUCCESS完成 OID 集合要求。

如果延伸模組未擁有要儲存的指定運行時間數據,擴充功能會呼叫 NdisFOidRequest 這會將 OID 集合要求轉送至可延伸交換器驅動程式堆疊中的基礎驅動程式。 在此情況下,擴充功能不得修改 與 OID 要求相關聯的NDIS_SWITCH_NIC_SAVE_STATE 結構。 如需如何轉送 OID 要求的詳細資訊,請參閱 在 NDIS 篩選驅動程式中篩選 OID 要求。

如果OID_SWITCH_NIC_RESTORE的 OID 集合要求已完成, NDIS_STATUS_SUCCESS,可延伸交換器的通訊協定邊緣會發出另一個 OID 集合要求。 當它收到這個新的 OID 集合要求時,擴充功能可以執行下列其中一項:

  • 如果它擁有新 OID 要求中的運行時間數據,擴充功能會還原NDIS_SWITCH_NIC_SAVE_STATE結構中的其他運行時間數據。 接著,擴充功能會使用 NDIS_STATUS_SUCCESS完成 OID 要求。

  • 如果它未擁有新 OID 要求中的運行時間數據,擴充功能會呼叫 NdisFOidRequest ,將此 OID 集合要求轉送至基礎驅動程式。

OID_SWITCH_NIC_RESTORE_COMPLETE
可延伸交換器介面會發出可延伸交換器的通訊協議邊緣,以在可延伸交換器網路適配器的運行時間數據還原作業完成時發出這個 OID。

此 OID 要求會通知延伸模組,還原作業只針對指定的可延伸交換器 NIC 完成。

如需此 OID 要求的詳細資訊,請參閱 OID_SWITCH_NIC_RESTORE_COMPLETE

注意 如果 OID_SWITCH_NIC_RESTORE 設定要求是由可延伸交換器的迷你埠邊緣所接收,則會使用 NDIS_STATUS_SUCCESS 完成 OID 要求。 這會通知可延伸交換器的通訊協定邊緣,而沒有延伸模組擁有運行時間數據。 如果發生這種情況,可延伸交換器介面會記錄一個事件,該事件會記錄 原本儲存運行時間埠數據之延伸模組的 ExtensionIdPortId 成員值。