共用方式為


意外Wake-Up

意外喚醒是非預期的轉換至 D0。 當裝置進入 D3cold 之後,當同一個電源滑軌上的驅動程式要求從 D3cold 轉換到 D0 時,可能會發生意外喚醒當做副作用。 第一個裝置的驅動程式必須收到意外喚醒的通知,以防止裝置處於未初始化的 D0 狀態。

當裝置從 D3hot 移至 D3cold 時,它可能會這麼做,因為它與某些其他裝置共用的電源已關閉。 這些裝置輸入 D3cold 之後,其中一個裝置的驅動程式可能會要求轉換至 D0。 為了回應此要求,父匯流排驅動程式或 ACPI 篩選驅動程式會開啟電源來源,而共用電源的所有裝置都會進入其預設電源開啟硬體狀態。

預期此電源狀態變更的唯一設備磁碟機是要求變更的驅動程式。 其他裝置的驅動程式必須收到這項變更的通知,才能正確地初始化其裝置以在 D0 中運作。 只有可接收此通知的驅動程式才能讓其裝置進入 D3cold。 否則,驅動程式將不知道裝置何時進入 D0。

當裝置開啟時,它會進入預設、未初始化的硬體狀態。 例如, PCI Express Base 3.0 規格 會定義裝置第一次收到電源時所輸入的 D0 未初始化 狀態。 此狀態的定義專屬於 PCI 和 PCI Express 裝置,但連線到其他匯流排的裝置是設計成在開啟時進入類似的硬體狀態。

如果是實作多個功能的 PCI 或 PCI Express 裝置,這些裝置功能可能會共用相同的電源軌。 不過,每個函式可能會有不同的驅動程式,而且這些函式的驅動程式不太可能彼此直接通訊。 當其中一個函式的驅動程式要求電源狀態從 D3cold 變更為 D0 時,其他函式的驅動程式不會預期這項變更。 當這些其他函式接收電源時,其驅動程式必須收到通知,才能將函式設定為在 D0 中正確運作。

匯流排驅動程式會在開啟子裝置電源時偵測到。 如果此裝置的函式驅動程式未要求轉換至 D0,匯流排驅動程式會提示設備磁碟機將 D0 電源 IRP 傳送給本身, (目標狀態為 = PowerDeviceD0) 的IRP_MN_SET_POWER要求,以初始化裝置以在 D0 中運作。 從這個初始化的 D0 狀態,設備磁碟機接著可以起始裝置轉換至 D3hot。 設備磁碟機可以透過下列方式從公車驅動程式收到意外轉換至 D0 的通知:

  • 直接或間接註冊為 執行時間電源管理架構 用戶端的設備磁碟機, (PoFx) 接收通知回呼。
  • 為裝置提供喚醒之裝置的驅動程式,其擱置 IRP_MN_WAIT_WAKE 由匯流排驅動程式完成的要求。

從 Windows 8 開始,作為電源原則擁有者的裝置函式驅動程式可以註冊為 PoFx 的用戶端。 當匯流排驅動程式通知 PoFx 裝置發生意外轉換至 D0 時,PoFx 可協助裝置移至已初始化的 D0 狀態,然後移至 D3hot。 首先,PoFx 會呼叫驅動程式的 DevicePowerRequiredCallback 常式,以提示設備磁碟機將 D0 電源 IRP 向下傳送到裝置堆疊。 接下來,PoFx 會呼叫驅動程式的 DevicePowerNotRequiredCallback 常式,以通知設備磁碟機裝置不需要保持 D0 狀態。

從 Kernel-Mode Driver Framework (KMDF) 1.11 版開始,單一元件裝置的 KMDF 驅動程式可以藉由呼叫 WdfDeviceWdmAssignPowerFrameworkSettings 方法間接向 PoFx 註冊本身。 在此呼叫中,驅動程式會提供回呼常式的指標,以通知驅動程式意外轉換成 D0。 如需詳細資訊,請參閱 支援功能電源狀態

如果未向 PoFx 註冊其裝置的驅動程式,如果裝置處於喚醒狀態,仍會收到意外轉換至 D0 的通知。 當匯流排驅動程式開啟裝置電源時,他們會完成驅動程式 的IRP_MN_WAIT_WAKE 要求。 為了回應,驅動程式會初始化其裝置以在 D0 中運作。 裝置可能處於閒置狀態,在此情況下,驅動程式會在一段時間後將此裝置移至 D3hot。

未向 PoFx 註冊且未為其裝置提供喚醒的函式驅動程式不會收到從 D3cold 到 D0 意外轉換的通知。 裝置可能會花費大量時間處於未初始化的 D0 狀態。 在此狀態下,裝置中的所有元件通常會開啟。 為了減少閒置裝置的耗電量,只有在驅動程式可以收到意外轉換至 D0 的通知時,驅動程式才能夠進入 D3cold。