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


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

Метод QueryDeviceCapabilities вызывается PortCls в ответ на IRP_MN_QUERY_CAPABILITIES IRP Plug and Play.

Синтаксис

NTSTATUS QueryDeviceCapabilities(
  [in] PDEVICE_CAPABILITIES PowerDeviceCaps
);

Параметры

[in] PowerDeviceCaps

Указатель на структуру DEVICE_CAPABILITIES, указывающую возможности устройства

Возвращаемое значение

QueryDeviceCapabilities возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае метод возвращает соответствующий код ошибки.

Замечания

Этот метод вызывается при запуске драйвера, чтобы получить возможности для устройства. Метод передает драйверу адаптера структуру возможностей, которая определяет сопоставления между состояниями питания системы и состояниями питания устройства. PortCls записывает значения по умолчанию для этих сопоставлений в структуру перед вызовом метода. Во время вызова драйвер адаптера имеет возможность изменять сопоставления при необходимости.

Как правило, драйвер адаптера не должен изменять эти параметры. Если драйвер адаптера должен переопределить значения по умолчанию, он может изменить сопоставления на более глубокое (меньшее питание) устройства, но не на более слабое (более powered) состояние питания устройства. Например, сопоставления для 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 (include Portcls.h)

См. также

DEVICE_CAPABILITIES

IAdapterPowerManagement

IRP_MN_QUERY_CAPABILITIES

PcRegisterAdapterPowerManagement