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