共用方式為


PoRegisterDeviceForIdleDetection 函式 (ntifs.h)

PoRegisterDeviceForIdleDetection 例程會啟用或取消閑置偵測,並設定裝置的閒置逾時值。

語法

PULONG PoRegisterDeviceForIdleDetection(
  [in] PDEVICE_OBJECT     DeviceObject,
  [in] ULONG              ConservationIdleTime,
  [in] ULONG              PerformanceIdleTime,
  [in] DEVICE_POWER_STATE State
);

參數

[in] DeviceObject

針對裝置建立 的驅動程式DEVICE_OBJECT 指標。 此參數可以指向 PDO) (實體裝置物件,或 FDO) (功能性裝置物件。

[in] ConservationIdleTime

設定當系統電源原則針對能源消耗優化時,) 以秒為單位 (逾時值。 指定零,以在啟用原則生效時停用閑置偵測。

[in] PerformanceIdleTime

設定當系統電源原則優化效能時,) 以秒為單位 (逾時值。 指定零,以在效能原則生效時停用閑置偵測。

[in] State

指定符合一個IRP_MN_SET_POWER要求時,要要求之裝置電源狀態 可能的值為 DEVICE_POWER_STATE 值。

傳回值

PoRegisterDeviceForIdleDetection 會傳回閑置計數器的指標,指出已啟用閑置偵測。 它會傳回 NULL,指出已停用閑置偵測、無法配置閑置計數器,或其中一或兩個逾時值無效。

備註

PoRegisterDeviceForIdleDetection 可讓驅動程式使用 電源管理員所提供的閑置偵測機制。 驅動程式基於下列任何原因呼叫 PoRegisterDeviceForIdleDetection

  • 啟用裝置的閑置偵測,並設定初始閑置逾時值。
  • 變更裝置的閑置逾時值。
  • 停用裝置的閑置偵測。

啟用裝置以進行閑置偵測之後,驅動程式會在裝置正在使用時呼叫 PoSetDeviceBusy ,並傳遞 PoRegisterDeviceForIdleDetection傳回的非 NULL 閑置指標。 呼叫 PoSetDeviceBusy 會重新啟動閑置倒數計時。 請注意,驅動程式不得將 NULL 指標傳遞至 PoSetDeviceBusy

每當裝置滿足目前的閑置逾時值時,電源管理員就會將 IRP_MN_SET_POWER 要求傳送至裝置堆疊頂端,並指定裝置電源狀態 狀態。 為了回應 IRP,每個驅動程式會在電源狀態轉換之前執行任何所需的裝置特定工作,然後將 IRP 傳遞至下一個較低的驅動程式。 當 IRP 到達總線驅動程式時,該驅動程式會將裝置置於要求的較低電源狀態,並完成 IRP。

PoRegisterDeviceForIdleDetection 會同時設定逾時值,以用於調節和效能。 當系統電源原則優化為新進階時,會套用一個,即會套用 一個一 般時間值;當系統電源原則優化效能時,會套用 PerformanceIdleTime 值。 一般而言,適用的原則取決於電源:使用 AC 電源執行時,系統會針對效能優化,而當電池不足時,系統會針對電池優化。

某些裝置可以指定 -1 的逾時值,以針對其裝置類別使用標準電源原則逾時。 標準逾時值可為支援的標準裝置類別提供更好的系統整合。 目前,WDM 針對類型為 FILE_DEVICE_DISK 和 FILE_DEVICE_MASS_STORAGE 的裝置支援此功能。 如果為不支援類型的裝置指定了 -1,PoRegisterDeviceForIdleDetection 會傳回 NULL。 如需裝置類型的相關信息,請參閱 指定裝置類型

每個裝置只能設定一個閑置偵測。 後續呼叫 PoRegisterDeviceForIdleDetection 會變更閒置偵測值。

如果一律是 ZeroIdleTime 和 PerformanceIdleTime,此例程會取消裝置的所有閒置偵測,並傳回 NULL。

PoRegisterDeviceForIdleDetection 可以從執行自己的閑置偵測的需求釋出驅動程式。 不過,驅動程式也可以實作自己的閑置偵測。

規格需求

需求
最低支援的用戶端 Windows 2000
目標平台 Universal
標頭 ntifs.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= APC_LEVEL

另請參閱

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy