Compartilhar via


Método IAdapterPowerManagement::QueryDeviceCapabilities (portcls.h)

O QueryDeviceCapabilities método é chamado por PortCls em resposta a uma Plug and Play IRP_MN_QUERY_CAPABILITIES IRP.

Sintaxe

NTSTATUS QueryDeviceCapabilities(
  [in] PDEVICE_CAPABILITIES PowerDeviceCaps
);

Parâmetros

[in] PowerDeviceCaps

Ponteiro para uma estrutura DEVICE_CAPABILITIES especificando os recursos do dispositivo

Retornar valor

QueryDeviceCapabilities retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, o método retornará um código de erro apropriado.

Comentários

Esse método é chamado na inicialização do driver para obter os recursos do dispositivo. O método passa para o driver do adaptador uma estrutura de funcionalidades que define os mapeamentos entre os estados de energia do sistema e os estados de energia do dispositivo. PortCls grava os valores padrão desses mapeamentos na estrutura antes de chamar o método . Durante a chamada, o driver do adaptador tem a oportunidade de editar os mapeamentos, se necessário.

Normalmente, o driver do adaptador não deve alterar essas configurações. Se o driver do adaptador precisar substituir os padrões, ele poderá alterar os mapeamentos para um estado de energia de dispositivo mais profundo (menos alimentado), mas não para um estado de energia de dispositivo mais fraco (mais alimentado). Por exemplo, os mapeamentos para S1 (PowerSystemSleeping1) podem ser alterados de D1 para D3, mas não para D0.

Para preencher a estrutura PowerDeviceCaps de um dispositivo, o driver do adaptador deve chamar PcRegisterAdapterPowerManagement para registrar a interface IAdapterPowerManagement no momento da inicialização do dispositivo. O sistema operacional consulta dispositivos antes de chamar a rotina de inicialização do dispositivo do driver do adaptador.

Para alterar os mapeamentos entre os estados de energia do sistema e os estados de energia do dispositivo, o driver do adaptador altera os valores na matriz DeviceState na estrutura PowerDeviceCaps . Esses mapeamentos devem ser alterados somente se necessário. O exemplo de código a seguir mostra como mapear mapeamentos D1 para D3:

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

O código do QueryDeviceCapabilities método deve residir na memória paginada.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho portcls.h (inclua Portcls.h)

Confira também

DEVICE_CAPABILITIES

IAdapterPowerManagement

IRP_MN_QUERY_CAPABILITIES

PcRegisterAdapterPowerManagement