Método IAdapterPowerManagement::QueryDeviceCapabilities (portcls.h)
QueryDeviceCapabilities
PortCls llama al método en respuesta a un Plug and Play IRP_MN_QUERY_CAPABILITIES IRP.
Sintaxis
NTSTATUS QueryDeviceCapabilities(
[in] PDEVICE_CAPABILITIES PowerDeviceCaps
);
Parámetros
[in] PowerDeviceCaps
Puntero a una estructura de DEVICE_CAPABILITIES que especifica las funcionalidades del dispositivo
Valor devuelto
QueryDeviceCapabilities
devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, el método devuelve un código de error adecuado.
Comentarios
Este método se llama al inicio del controlador para obtener las funcionalidades del dispositivo. El método pasa al controlador del adaptador una estructura de funcionalidades que define las asignaciones entre los estados de energía del sistema y los estados de energía del dispositivo. PortCls escribe los valores predeterminados para estas asignaciones en la estructura antes de llamar al método . Durante la llamada, el controlador del adaptador tiene la oportunidad de editar las asignaciones, si es necesario.
Normalmente, el controlador del adaptador no debe cambiar esta configuración. Si el controlador del adaptador debe invalidar los valores predeterminados, puede cambiar las asignaciones a un estado de alimentación de dispositivo más profundo (menos alimentado), pero no a un estado de alimentación de dispositivo más débil (más alimentado). Por ejemplo, las asignaciones de S1 (PowerSystemSleeping1) se pueden cambiar de D1 a D3, pero no a D0.
Para rellenar la estructura PowerDeviceCaps de un dispositivo, el controlador del adaptador debe llamar a PcRegisterAdapterPowerManagement para registrar la interfaz IAdapterPowerManagement en tiempo de inicio del dispositivo. El sistema operativo consulta los dispositivos antes de llamar a la rutina de inicio del dispositivo del controlador del adaptador.
Para cambiar las asignaciones entre los estados de energía del sistema y los estados de energía del dispositivo, el controlador del adaptador cambia los valores de la matriz DeviceState en la estructura PowerDeviceCaps . Estas asignaciones solo deben cambiarse si es necesario. En el ejemplo de código siguiente se muestra cómo asignar asignaciones D1 a D3:
for (i=ULONG(PowerSystemWorking); i<=ULONG(PowerSystemShutdown); i++)
{
if (PowerDeviceCaps->DeviceState[i] == PowerDeviceD1)
{
PowerDeviceCaps->DeviceState[i] = PowerDeviceD3;
}
}
El código del QueryDeviceCapabilities
método debe residir en la memoria paginada.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Encabezado | portcls.h (incluir Portcls.h) |