estructura DEVICE_CAPABILITIES (wdm.h)
Una estructura de DEVICE_CAPABILITIES describe las funcionalidades de potencia 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 ejección de dispositivos controladas 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 se establece 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 de concentrador USB establece el parámetro Extraíble . El controlador de función no debe modificarlo.
Si Removable se establece en TRUE, el dispositivo se muestra en el programa Unplug o Eject 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 obtener 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 cuyo controlador almacena en caché las escrituras en memoria no se puede quitar de forma segura sin permitir primero que el controlador vacíe su caché en el hardware.
Los controladores para dispositivos USB que admiten la eliminación sorpresa deben establecer esto en TRUE solo cuando el IRP se pasa a la 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 bus primario de un dispositivo o un controlador de filtro de bus establece esta marca cuando dicho controlador determina que el hardware del dispositivo está deshabilitado.
El administrador de PnP envía una IRP_MN_QUERY_CAPABILITIES IRP justo después de enumerar un dispositivo y envía otra después de que se haya iniciado 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 conductores 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 del dispositivo 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 en 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 tal 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 el 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) |