WDM设备功能DEVICE_CAPABILITIES
+ -

注册表Capabilities值解释(DEVICE_CAPABILITIES)

2023-09-01 18 0

这里的注册表指的是:

计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum

路径下的某个设备。
Capabilities
该值其实是总线驱动程序返回的是子设备的DEVICE_CAPABILITIES的简要信息。
其结构体定义如下:

2: kd> dt _DEVICE_CAPABILITIES
nt!_DEVICE_CAPABILITIES
   +0x000 Size             : Uint2B
   +0x002 Version          : Uint2B
   +0x004 DeviceD1         : Pos 0, 1 Bit
   +0x004 DeviceD2         : Pos 1, 1 Bit
   +0x004 LockSupported    : Pos 2, 1 Bit
   +0x004 EjectSupported   : Pos 3, 1 Bit
   +0x004 Removable        : Pos 4, 1 Bit
   +0x004 DockDevice       : Pos 5, 1 Bit
   +0x004 UniqueID         : Pos 6, 1 Bit
   +0x004 SilentInstall    : Pos 7, 1 Bit
   +0x004 RawDeviceOK      : Pos 8, 1 Bit
   +0x004 SurpriseRemovalOK : Pos 9, 1 Bit
   +0x004 WakeFromD0       : Pos 10, 1 Bit
   +0x004 WakeFromD1       : Pos 11, 1 Bit
   +0x004 WakeFromD2       : Pos 12, 1 Bit
   +0x004 WakeFromD3       : Pos 13, 1 Bit
   +0x004 HardwareDisabled : Pos 14, 1 Bit
   +0x004 NonDynamic       : Pos 15, 1 Bit
   +0x004 WarmEjectSupported : Pos 16, 1 Bit
   +0x004 NoDisplayInUI    : Pos 17, 1 Bit
   +0x004 Reserved1        : Pos 18, 1 Bit
   +0x004 WakeFromInterrupt : Pos 19, 1 Bit
   +0x004 Reserved         : Pos 20, 12 Bits
   +0x008 Address          : Uint4B
   +0x00c UINumber         : Uint4B
   +0x010 DeviceState      : [7] _DEVICE_POWER_STATE
   +0x02c SystemWake       : _SYSTEM_POWER_STATE
   +0x030 DeviceWake       : _DEVICE_POWER_STATE
   +0x034 D1Latency        : Uint4B
   +0x038 D2Latency        : Uint4B
   +0x03c D3Latency        : Uint4B

XP系统的结构体定义如下:

typedef struct _DEVICE_CAPABILITIES {
    USHORT Size;
    USHORT Version;  // the version documented here is version 1
    ULONG DeviceD1:1;
    ULONG DeviceD2:1;
    ULONG LockSupported:1;
    ULONG EjectSupported:1; // Ejectable in S0
    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 Reserved:14;

    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;

可以看到,DEVICE_CAPABILITIES中的信息比较多,而注册表中Capabilities只是其部分简要信息,其对应关系如下:

Capabilities = (Capabilities->LockSupported)          |
               (Capabilities->EjectSupported    << 1) |
               (Capabilities->WarmEjectSupported<< 1) |
               (Capabilities->Removable         << 2) |
               (Capabilities->DockDevice        << 3) |
               (Capabilities->UniqueID          << 4) |
               (Capabilities->SilentInstall     << 5) |
               (Capabilities->RawDeviceOK       << 6) |
               (Capabilities->SurpriseRemovalOK << 7) |
               (Capabilities->HardwareDisabled  << 8) |
               (Capabilities->NonDynamic        << 9);

其实OSR有一个比交有名的工具DeviceTree,只不过因为其版本比较老了,导致这些信息读不出来。
DeviceTree

0 篇笔记 写笔记

注册表Capabilities值解释(DEVICE_CAPABILITIES
这里的注册表指的是:计算机HKEY_LOCAL_MACHINESYSTEMControlSet001Enum路径下的某个设备。该值其实是总线驱动程序返回的是子设备的DEVICE_CAPABILITIES的简要信息。其结构体定义如下:2: kd> dt _DEVICE_CAPABI......
DEVICE_CAPABILITIES的分类及数据设置
DEVICE_CAPABILITIES是由IRP_MN_QUERY_CAPABILITIES请求发起的,用于获取设备的功能属性。所以对于任何设备,这个属性的设置应由创建这个设备的驱动来进行数据填充。所以从这方面来理解,完成IRP_MN_QUERY_CAPABILITIES这个请求并填充DEVICE_......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!