DEVICE_CAPABILITIES wdm.h ()

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

语法

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 集线器。

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

如果"可移动"设置为 TRUE,则设备将显示在"拔下"或"弹出硬件"程序中,除非"意外""删除""确定"也设置为 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,在设备启动后发送另一个 IRP。 PnP 管理器仅在枚举设备后检查此位。 设备启动后,将忽略此位。

NonDynamic

留待将来使用。

WarmEjectSupported

留待将来使用。

NoDisplayInUI

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

Reserved1

预留给系统使用。

WakeFromInterrupt

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

SecureDevice

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

ChildOfVgaEnabledBridge

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

DecodeIoOnBoot

确定设备在启动时是否启用了 IO 解码。

Reserved

预留给系统使用。

Address

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

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

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

1394

不提供地址,因为地址是可变的。 默认为 0xFFFFFFFF。

EISA

槽号 (0-F) 。

IDE

对于 IDE 设备,地址包含目标 ID 和 LUN。 对于 IDE 通道,地址为 0 或 1 (0 = 主通道,1 = 辅助) 。

ISApnp

不提供地址。 默认为 0xFFFFFFFF。

PCMCIA (PC 卡)

套接字编号 (或0x00 0x40) 。

PCI

高单词中的设备编号和低单词中的函数号。

SCSI

目标 ID。

USB

端口号。

UINumber

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

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

DeviceState

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

此数组中的条目基于父 devnode 的功能。 通常,驱动程序不应更改这些值。 但是,如有必要,驱动程序可以将值从 PowerDeviceD1 降低至 PowerDeviceD2

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

SystemWake

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

总线驱动程序可以从其父 devnode 获取此信息。

通常,驱动程序不应更改此值。 但是,如有必要,驱动程序可以从 PowerSystemHibernatePowerSystemS1,以指示其设备无法将系统从休眠状态唤醒,但可以从较高的休眠状态唤醒。

DeviceWake

指定设备可用于向唤醒事件发出信号的最小设备电源状态。 值 PowerDeviceUnspecified 指示设备无法对唤醒事件发出信号。

D1Latency

以100微秒为单位指定设备的近似最坏情况延迟,以将设备从PowerDeviceD1状态返回到PowerDeviceD0状态。 如果设备不支持 D1 状态,则设置为零。

D2Latency

以100微秒为单位指定设备的近似最坏情况延迟,以将设备从PowerDeviceD2状态返回到PowerDeviceD0状态。 如果设备不支持 D2 状态,则设置为零。

D3Latency

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

注解

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

发送 IRP_MN_QUERY_CAPABILITIES 请求的驱动程序必须先初始化此结构的 大小版本地址UINumber 成员,然后才能发送 IRP。

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

要求

   
标头 wdm (包括 Wdm、Ntddk、Ntifs)

请参阅

IRP_MN_QUERY_CAPABILITIES

PNP_DEVICE_STATE