IAdapterPowerManagement::QueryDeviceCapabilities 方法 (portcls.h)

PortCls QueryDeviceCapabilities 會呼叫 方法,以回應 隨插即用 IRP_MN_QUERY_CAPABILITIES IRP。

語法

NTSTATUS QueryDeviceCapabilities(
  [in] PDEVICE_CAPABILITIES PowerDeviceCaps
);

參數

[in] PowerDeviceCaps

指定裝置功能的 DEVICE_CAPABILITIES 結構的指標

傳回值

QueryDeviceCapabilities 如果呼叫成功,則會傳回STATUS_SUCCESS。 否則,方法會傳回適當的錯誤碼。

備註

這個方法會在驅動程序啟動時呼叫,以取得裝置的功能。 方法會傳遞至配接器驅動程式的功能結構,定義系統電源狀態與裝置電源狀態之間的對應。 PortCls 會在呼叫 方法之前,將這些對應的預設值寫入 結構。 在呼叫期間,適配卡驅動程式有機會視需要編輯對應。

一般而言,配接器驅動程序不應該變更這些設定。 如果配接器驅動程式必須覆寫預設值,它可以將對應變更為較深的 (較不具有電源的裝置電源狀態) ,但無法變更為較弱的 () 裝置電源狀態。 例如,S1 (PowerSystemSleeping1) 的對應可以從 D1 變更為 D3,但不能變更為 D0。

為了填入裝置的 PowerDeviceCaps 結構,配接器驅動程式應該在裝置啟動時呼叫 PcRegisterAdapterPowerManagement 來註冊 IAdapterPowerManagement 介面。 操作系統會先查詢裝置,再呼叫配接器驅動程式的裝置啟動例程。

為了變更系統電源狀態與裝置電源狀態之間的對應,配接器驅動程序會變更 PowerDeviceCaps 結構中 DeviceState 陣列中的值。 只有在需要時,才應該變更這些對應。 下列程式代碼範例示範如何將 D1 對應至 D3:

  for (i=ULONG(PowerSystemWorking); i<=ULONG(PowerSystemShutdown); i++)
      {
          if (PowerDeviceCaps->DeviceState[i] == PowerDeviceD1)
          {
              PowerDeviceCaps->DeviceState[i] = PowerDeviceD3;
          }
      }

方法的程式 QueryDeviceCapabilities 代碼必須位於分頁記憶體中。

規格需求

需求
目標平台 Universal
標頭 portcls.h (包括 Portcls.h)

另請參閱

DEVICE_CAPABILITIES

IAdapterPowerManagement

IRP_MN_QUERY_CAPABILITIES

PcRegisterAdapterPowerManagement