estructura de DEVICE_CAPABILITIES (wdm.h)

Una estructura de DEVICE_CAPABILITIES describe las funcionalidades de alimentación y PnP de un dispositivo. Esta estructura se devuelve en respuesta a un IRP de IRP_MN_QUERY_CAPABILITIES .

Sintaxis

typedef struct _DEVICE_CAPABILITIES {
  USHORT             Size;
  USHORT             Version;
  ULONG              DeviceD1 : 1;
  ULONG              DeviceD2 : 1;
  ULONG              LockSupported : 1;
  ULONG              EjectSupported : 1;
  ULONG              Removable : 1;
  ULONG              DockDevice : 1;
  ULONG              UniqueID : 1;
  ULONG              SilentInstall : 1;
  ULONG              RawDeviceOK : 1;
  ULONG              SurpriseRemovalOK : 1;
  ULONG              WakeFromD0 : 1;
  ULONG              WakeFromD1 : 1;
  ULONG              WakeFromD2 : 1;
  ULONG              WakeFromD3 : 1;
  ULONG              HardwareDisabled : 1;
  ULONG              NonDynamic : 1;
  ULONG              WarmEjectSupported : 1;
  ULONG              NoDisplayInUI : 1;
  ULONG              Reserved1 : 1;
  ULONG              WakeFromInterrupt : 1;
  ULONG              SecureDevice : 1;
  ULONG              ChildOfVgaEnabledBridge : 1;
  ULONG              DecodeIoOnBoot : 1;
  ULONG              Reserved : 9;
  ULONG              Address;
  ULONG              UINumber;
  DEVICE_POWER_STATE DeviceState[POWER_SYSTEM_MAXIMUM];
  SYSTEM_POWER_STATE SystemWake;
  DEVICE_POWER_STATE DeviceWake;
  ULONG              D1Latency;
  ULONG              D2Latency;
  ULONG              D3Latency;
} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;

Miembros

Size

Especifica el tamaño de la estructura, en bytes. El componente que envía la solicitud de IRP_MN_QUERY_CAPABILITIES establece este campo.

Version

Especifica la versión de la estructura, actualmente versión 1. El componente que envía la solicitud de IRP_MN_QUERY_CAPABILITIES establece este campo.

DeviceD1

Especifica si el hardware del dispositivo admite el estado de alimentación D1. Los controladores no deben cambiar este valor.

DeviceD2

Especifica si el hardware del dispositivo admite el estado de alimentación D2. Los controladores no deben cambiar este valor.

LockSupported

Especifica si el dispositivo admite el bloqueo de dispositivos físicos que impide la expulsión del dispositivo. Este miembro pertenece a la expulsión del dispositivo desde su ranura, en lugar de expulsar un fragmento de medios extraíbles del dispositivo.

EjectSupported

Especifica si el dispositivo admite la expulsión de dispositivos controlados por software mientras el sistema está en estado PowerSystemWorking . Este miembro pertenece a la expulsión del dispositivo desde su ranura, en lugar de expulsar un fragmento de medios extraíbles del dispositivo.

Removable

Especifica si el dispositivo se puede quitar dinámicamente de su elemento primario inmediato. Si Removable está establecido en TRUE, el dispositivo no pertenece al mismo objeto físico que su elemento primario.

Por ejemplo, si Removable se establece en TRUE para un dispositivo compuesto USB dentro de una impresora multifunción, el dispositivo compuesto no pertenece al objeto físico de su elemento primario inmediato, como un concentrador USB dentro de un equipo portátil.

En la mayoría de los casos, el controlador de bus, no el controlador de función, debe determinar el valor del parámetro Extraíble del dispositivo. En el caso de los dispositivos USB, el controlador del concentrador USB establece el parámetro Extraíble . El controlador de función no debe modificarlo.

Si Removable está establecido en TRUE, el dispositivo se muestra en el programa Desconectar o expulsar hardware , a menos que SurpriseRemovalOK también esté establecido en TRUE.

DockDevice

Especifica si el dispositivo es un periférico de acoplamiento.

UniqueID

Especifica si el identificador de instancia del dispositivo es único en todo el sistema. Este bit está claro si el identificador de instancia es único solo dentro del ámbito del bus. Para más información, consulte Cadenas de identificación de dispositivos.

SilentInstall

Especifica si Administrador de dispositivos debe suprimir todos los cuadros de diálogo de instalación; excepto los cuadros de diálogo necesarios, como "no se encontraron controladores compatibles".

RawDeviceOK

Especifica si el controlador del bus subyacente puede controlar el dispositivo si no hay ningún controlador de función (por ejemplo, dispositivos SCSI en modo de paso a través). Este modo de operación se denomina modo sin formato.

SurpriseRemovalOK

Especifica si el controlador de función del dispositivo puede controlar el caso en el que se quita el dispositivo antes de que Windows pueda enviar IRP_MN_QUERY_REMOVE_DEVICE a él. Si SurpriseRemovalOK está establecido en TRUE, el dispositivo se puede quitar de forma segura de su elemento primario inmediato, independientemente del estado en el que se encuentra su controlador.

Por ejemplo, un mouse USB estándar no mantiene ningún estado en su hardware y, por tanto, se puede quitar de forma segura en cualquier momento. Sin embargo, un disco duro externo cuyos controladores almacenan en caché las escrituras en memoria no se pueden quitar de forma segura sin dejar que el controlador vacíe su caché en el hardware.

Los controladores para dispositivos USB que admiten la eliminación sorpresa deben establecerlo en TRUE solo cuando el IRP se pasa de copia de seguridad de la pila de controladores.

WakeFromD0

Especifica si el dispositivo puede responder a una señal de reactivación externa mientras está en estado D0. Los controladores no deben cambiar este valor.

WakeFromD1

Especifica si el dispositivo puede responder a una señal de reactivación externa mientras está en estado D1. Los controladores no deben cambiar este valor.

WakeFromD2

Especifica si el dispositivo puede responder a una señal de reactivación externa mientras está en estado D2. Los controladores no deben cambiar este valor.

WakeFromD3

Especifica si el dispositivo puede responder a una señal de reactivación externa mientras está en estado D3. Los controladores no deben cambiar este valor.

HardwareDisabled

Cuando se establece, esta marca especifica que el hardware del dispositivo está deshabilitado.

El controlador de autobús primario de un dispositivo o un controlador de filtro de autobús establece esta marca cuando dicho controlador determina que el hardware del dispositivo está deshabilitado.

El administrador de PnP envía un IRP_MN_QUERY_CAPABILITIES IRP justo después de enumerar un dispositivo y envía otro después de iniciar el dispositivo. El administrador de PnP solo comprueba este bit justo después de enumerar el dispositivo. Una vez iniciado el dispositivo, este bit se omite.

NonDynamic

Reservado para un uso futuro.

WarmEjectSupported

Reservado para un uso futuro.

NoDisplayInUI

No muestre el dispositivo en la interfaz de usuario. Si se establece este bit, el dispositivo nunca se muestra en la interfaz de usuario, incluso si el dispositivo está presente, pero no se inicia. Solo los controladores de autobús y los controladores de filtro de autobús asociados deben establecer este bit. (Consulte también la marca PNP_DEVICE_DONT_DISPLAY_IN_UI en la estructura PNP_DEVICE_STATE ).

Reserved1

Reservado para uso del sistema.

WakeFromInterrupt

Indica si el controlador o ACPI es responsable de controlar el evento de reactivación. Si se establece, el controlador es responsable de controlar el evento de reactivación. ACPI arma el dispositivo cuando recibe un IRP de IRP_MN_WAIT_WAKE, pero no conecta la interrupción, completa el IRP para notificar a la pila de dispositivos de un evento de reactivación.

SecureDevice

Indica si el dispositivo es un dispositivo seguro.

ChildOfVgaEnabledBridge

Para un dispositivo VGA, indica si el puente primario tiene establecido el bit de descodificación VGA.

DecodeIoOnBoot

Indica si el dispositivo tiene la descodificación de E/S habilitada en el arranque.

Reserved

Reservado para uso del sistema.

Address

Especifica una dirección que indica dónde se encuentra el dispositivo en su bus subyacente.

La interpretación de este número es específica del bus. Si la dirección es desconocida o el controlador de autobús no admite una dirección, el controlador de autobús deja este miembro en su valor predeterminado de 0xFFFFFFFF.

En la lista siguiente se describe la información que ciertos controladores de autobús almacenan en el campo Dirección para sus dispositivos secundarios:

En bus Descripción
1394 No proporciona una dirección porque las direcciones son volátiles. El valor predeterminado es 0xFFFFFFFF.
EISA Número de ranura (0-F).
IDE Para un dispositivo IDE, la dirección contiene el identificador de destino y el LUN. Para un canal IDE, la dirección es cero o una (0 = canal principal y 1 = canal secundario).
Isapnp No proporciona una dirección. El valor predeterminado es 0xFFFFFFFF.
Tarjeta PC (PCMCIA) Número de socket (normalmente 0x00 o 0x40).
PCI Número de dispositivo en la palabra alta y el número de función en la palabra baja.
SCSI Identificador de destino.
USB Número del puerto.

UINumber

Especifica un número asociado al dispositivo que se puede mostrar en la interfaz de usuario.

Este número suele ser un número de ranura percibido por el usuario, como un número impreso junto a la ranura de la placa, o algún otro número que facilita la localización del dispositivo físico para el usuario. En el caso de los autobuses sin dicha convención, o cuando se desconoce UINumber , el controlador de autobús deja a este miembro en su valor predeterminado de 0xFFFFFFFF.

DeviceState[POWER_SYSTEM_MAXIMUM]

Matriz de valores que indica el estado de alimentación del dispositivo más alimentado que el dispositivo puede mantener para cada estado de alimentación del sistema. El elemento DeviceState[PowerSystemWorking] de la matriz corresponde al estado del sistema S0. La entrada de PowerSystemUnspecified está reservada para uso del sistema.

Las entradas de esta matriz se basan en las funciones del nodo primario. Como regla general, un controlador no debe cambiar estos valores. Sin embargo, si es necesario, un controlador puede reducir el valor, por ejemplo, de PowerDeviceD1 a PowerDeviceD2.

Si el controlador de bus no puede determinar el estado de alimentación del dispositivo adecuado para un dispositivo enumerado en raíz, establece DeviceState[PowerSystemWorking] en PowerDeviceD0 y en todas las demás entradas en PowerDeviceD3.

SystemWake

Especifica el estado de alimentación del sistema con menos energía desde el que el dispositivo puede indicar un evento de reactivación. Un valor de PowerSystemUnspecified indica que el dispositivo no puede reactivar el sistema.

Un controlador de autobús puede obtener esta información de su devnode primario.

En general, un controlador no debe cambiar este valor. Sin embargo, si es necesario, un controlador puede elevar el estado de energía, por ejemplo, desde PowerSystemHibernate a PowerSystemS1, para indicar que su dispositivo no puede reactivar el sistema desde un estado de hibernación, pero puede desde un estado de suspensión con mayor potencia.

DeviceWake

Especifica el estado de alimentación del dispositivo con menos energía desde el que el dispositivo puede indicar un evento de reactivación. Un valor de PowerDeviceUnspecified indica que el dispositivo no puede indicar un evento de reactivación.

D1Latency

Especifica la latencia aproximada del peor de los casos, en unidades de 100 microsegundos, para devolver el dispositivo al estado PowerDeviceD0 desde el estado PowerDeviceD1 . Se establece en cero si el dispositivo no admite el estado D1.

D2Latency

Especifica la latencia aproximada de peor caso del dispositivo, en unidades de 100 microsegundos, para devolver el dispositivo al estado PowerDeviceD0 desde el estado PowerDeviceD2 . Se establece en cero si el dispositivo no admite el estado D2.

D3Latency

Especifica la latencia aproximada de peor caso del dispositivo, en unidades de 100 microsegundos, para devolver el dispositivo al estado PowerDeviceD0 desde el estado PowerDeviceD3 . Se establece en cero si el dispositivo no admite el estado D3.

Comentarios

Los controladores de autobús establecen los valores adecuados en esta estructura en respuesta a un IRP de IRP_MN_QUERY_CAPABILITIES . Los controladores de filtro de bus, los controladores de función y los controladores de filtro pueden modificar las funcionalidades establecidas por el controlador de autobús.

Los controladores que envían una solicitud de IRP_MN_QUERY_CAPABILITIES deben inicializar los miembros Size, Version, Address y UINumber de esta estructura antes de enviar el IRP.

Para obtener más información sobre el uso de la estructura de DEVICE_CAPABILITIES para describir las funcionalidades de energía de un dispositivo, consulte Reporting Device Power Capabilities.

Requisitos

Requisito Valor
Header wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)

Consulte también

IRP_MN_QUERY_CAPABILITIES

PNP_DEVICE_STATE