Поделиться через


Метод IAdapterPowerManagement::QueryDeviceCapabilities (portcls.h)

Метод QueryDeviceCapabilities вызывается PortCls в ответ на Plug and Play 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 во время запуска устройства. Операционная система запрашивает устройства перед вызовом процедуры запуска устройства драйвера адаптера.

Чтобы изменить сопоставления между состояниями питания системы и устройства, драйвер адаптера изменяет значения в массиве DeviceState в структуре PowerDeviceCaps . Эти сопоставления следует изменять только при необходимости. В следующем примере кода показано, как сопоставить сопоставления 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