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) |