DEVICE_CAPABILITIES 结构 (wdm.h)

DEVICE_CAPABILITIES结构描述设备的 PnP 和电源功能。 返回此结构以响应 IRP_MN_QUERY_CAPABILITIES IRP。

语法

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;

成员

Size

指定结构的大小(以字节为单位)。 此字段由发送 IRP_MN_QUERY_CAPABILITIES 请求的组件设置。

Version

指定结构的版本,当前版本 1。 此字段由发送 IRP_MN_QUERY_CAPABILITIES 请求的组件设置。

DeviceD1

指定设备硬件是否支持 D1 电源状态。 驱动程序不应更改此值。

DeviceD2

指定设备硬件是否支持 D2 电源状态。 驱动程序不应更改此值。

LockSupported

指定设备是否支持阻止设备弹出的物理设备锁定。 此成员涉及从其插槽中弹出设备,而不是从设备弹出一段可移动媒体。

EjectSupported

指定在系统处于 PowerSystemWorking 状态时设备是否支持软件控制的设备弹出。 此成员涉及从其插槽中弹出设备,而不是从设备弹出一段可移动媒体。

Removable

指定是否可以从其直接父级动态删除设备。 如果 可移动 设置为 TRUE,则设备不属于其父级的同一物理对象。

例如,如果多功能打印机内的 USB 复合设备将 “可移动” 设置为 TRUE ,则复合设备不属于其直系父级的物理对象,例如笔记本电脑内的 USB 集线器。

在大多数情况下,总线驱动程序(而不是函数驱动程序)应确定设备的 可移动 参数的值。 对于 USB 设备,USB 集线器驱动程序设置 可移动 参数。 函数驱动程序不应对其进行修改。

如果 可移动 设置为 TRUE,则设备将显示在 拔出或弹出硬件 程序中,除非 SurpriseRemovalOK 也设置为 TRUE

DockDevice

指定设备是否为停靠外设。

UniqueID

指定设备的实例 ID 在系统范围内是否是唯一的。 如果实例 ID 仅在总线范围内是唯一的,则此位是明确的。 有关详细信息,请参阅 设备标识字符串

SilentInstall

指定设备管理器是否应禁止显示所有安装对话框;所需对话框(如“找不到兼容的驱动程序”除外)。

RawDeviceOK

指定在没有函数驱动程序的情况下,基础总线的驱动程序是否可以驱动设备 (例如,处于直通模式的 SCSI 设备) 。 此操作模式称为 原始模式

SurpriseRemovalOK

指定设备的函数驱动程序是否可以处理在 Windows 可以向其发送 IRP_MN_QUERY_REMOVE_DEVICE 之前删除设备的情况。 如果将 SurpriseRemovalOK 设置为 TRUE,则可以从其直接父级安全地删除设备,而不管其驱动程序处于何种状态。

例如,标准 USB 鼠标在其硬件中不保持任何状态,因此可以随时安全地删除。 但是,如果不先让驱动程序将其缓存刷新到硬件,则无法安全地删除驱动程序缓存在内存中的外部硬盘。

支持意外删除的 USB 设备的驱动程序必须仅在将 IRP 传回驱动程序堆栈时将此设置为 TRUE

WakeFromD0

指定设备在 D0 状态下是否可以响应外部唤醒信号。 驱动程序不应更改此值。

WakeFromD1

指定设备在处于 D1 状态时是否可以响应外部唤醒信号。 驱动程序不应更改此值。

WakeFromD2

指定设备在处于 D2 状态时是否可以响应外部唤醒信号。 驱动程序不应更改此值。

WakeFromD3

指定设备在 D3 状态下是否可以响应外部唤醒信号。 驱动程序不应更改此值。

HardwareDisabled

设置后,此标志指定禁用设备的硬件。

设备父总线驱动程序或总线筛选器驱动程序在此类驱动程序确定设备硬件已禁用时设置此标志。

PnP 管理器在枚举设备后立即发送一 个IRP_MN_QUERY_CAPABILITIES IRP,并在设备启动后发送另一个。 PnP 管理器仅在枚举设备后立即检查此位。 启动设备后,将忽略此位。

NonDynamic

留待将来使用。

WarmEjectSupported

留待将来使用。

NoDisplayInUI

不要在用户界面中显示设备。 如果设置了此位,则设备永远不会显示在用户界面中,即使设备存在但无法启动。 只有总线驱动程序和关联的总线筛选器驱动程序应设置此位。 (另请参阅 PNP_DEVICE_STATE 结构中的 PNP_DEVICE_DONT_DISPLAY_IN_UI 标志。)

Reserved1

预留给系统使用。

WakeFromInterrupt

指示驱动程序或 ACPI 是否负责处理唤醒事件。 如果设置,驱动程序负责处理唤醒事件。 ACPI 在收到IRP_MN_WAIT_WAKE IRP 但未连接中断时为设备提供支持,请完成 IRP 以通知设备堆栈唤醒事件。

SecureDevice

指示设备是否为安全设备。

ChildOfVgaEnabledBridge

对于 VGA 设备,指示父网桥是否设置了 VGA 解码位。

DecodeIoOnBoot

指示设备在启动时是否启用了 IO 解码。

Reserved

预留给系统使用。

Address

指定一个地址,指示设备在其基础总线上的位置。

此数字的解释特定于总线。 如果地址未知或总线驱动程序不支持地址,则总线驱动程序将此成员保留为默认值0xFFFFFFFF。

以下列表描述了某些总线驱动程序在其子设备的 “地址” 字段中存储的信息:

公共汽车 说明
1394 不提供地址,因为地址是可变的。 默认为 0xFFFFFFFF。
EISA 槽编号 (0-F) 。
IDE 对于 IDE 设备,地址包含目标 ID 和 LUN。 对于 IDE 通道,地址为零或一 (0 = 主通道,1 = 辅助通道) 。
ISApnp 不提供地址。 默认为 0xFFFFFFFF。
PC 卡 (PCMCIA) 套接字编号通常 (0x00或0x40) 。
PCI 高字中的设备编号和低字中的函数编号。
SCSI 目标 ID。
USB 端口号。

UINumber

指定与可在用户界面中显示的设备关联的数字。

此数字通常是用户感知到的槽号,例如在板上的插槽旁边打印的数字,或使用户更容易定位物理设备的一些其他数字。 对于没有此类约定的总线,或者当 UINumber 未知时,总线驱动程序将此成员保留为其默认值0xFFFFFFFF。

DeviceState[POWER_SYSTEM_MAXIMUM]

一个值数组,指示设备可以为每个系统电源状态维护的最供电设备电源状态。 数组的 DeviceState[PowerSystemWorking] 元素对应于 S0 系统状态。 PowerSystemUnspecified 的条目保留供系统使用。

此数组中的条目基于父开发节点的功能。 一般情况下,驱动程序不应更改这些值。 但是,如有必要,驱动程序可以降低值,例如,从 PowerDeviceD1 降低到 PowerDeviceD2

如果总线驱动程序无法确定根枚举设备的相应设备电源状态,则会将 DeviceState[PowerSystemWorking] 设置为 PowerDeviceD0 ,将所有其他条目设置为 PowerDeviceD3

SystemWake

指定设备可从中发出唤醒事件信号的最小系统电源状态。 值为 PowerSystemUnspecified 表示设备无法唤醒系统。

总线驱动程序可以从其父开发节点获取此信息。

通常,驱动程序不应更改此值。 但是,如有必要,驱动程序可以提升电源状态(例如,从 PowerSystemHibernatePowerSystemS1),以指示其设备无法将系统从休眠状态唤醒,但可以从更高功率的睡眠状态唤醒系统。

DeviceWake

指定最低功率设备电源状态,设备可从中发出唤醒事件信号。 PowerDeviceUnspecified 值指示设备无法发出唤醒事件的信号。

D1Latency

指定设备从 PowerDeviceD1 状态返回到 PowerDeviceD0 状态时最差情况下的大致延迟(以 100 微秒为单位)。 如果设备不支持 D1 状态,则设置为零。

D2Latency

指定设备从 PowerDeviceD2 状态返回到 PowerDeviceD0 状态时,最差情况下的大致延迟(以 100 微秒为单位)。 如果设备不支持 D2 状态,则设置为零。

D3Latency

指定设备从 PowerDeviceD3 状态返回到 PowerDeviceD0 状态的最差情况延迟(以 100 微秒为单位)。 如果设备不支持 D3 状态,则设置为零。

注解

总线驱动程序在此结构中设置适当的值,以响应 IRP_MN_QUERY_CAPABILITIES IRP。 总线筛选器驱动程序、函数驱动程序和筛选器驱动程序可能会更改总线驱动程序设置的功能。

发送 IRP_MN_QUERY_CAPABILITIES请求的 驱动程序必须在发送 IRP 之前初始化此结构的 SizeVersionAddressUINumber 成员。

有关使用 DEVICE_CAPABILITIES 结构描述设备的电源功能的详细信息,请参阅 报告设备电源功能

要求

要求
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)

另请参阅

IRP_MN_QUERY_CAPABILITIES

PNP_DEVICE_STATE