IAdapterPowerManagement::QueryDeviceCapabilities 方法 (portcls.h)

方法QueryDeviceCapabilities由 PortCls 调用,以响应 即插即用 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 必须驻留在分页内存中。

要求

要求
目标平台 通用
标头 portcls.h (包括 Portcls.h)

另请参阅

DEVICE_CAPABILITIES

IAdapterPowerManagement

IRP_MN_QUERY_CAPABILITIES

PcRegisterAdapterPowerManagement