news 2026/4/23 9:54:12

nt!PpSaveDeviceCapabilities函数分析保存设备Capabilities到注册表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!PpSaveDeviceCapabilities函数分析保存设备Capabilities到注册表

nt!PpSaveDeviceCapabilities函数分析保存设备Capabilities到注册表

win7注册表相应地方:

//
// Open the device instance key
//

status = PpIrpQueryCapabilities(DeviceNode->PhysicalDeviceObject, &capabilities); 返回到这里:
if (!NT_SUCCESS(status)) {

return status;
}

return PpSaveDeviceCapabilities(DeviceNode,&capabilities);
}


0: kd> kc
#
00 nt!PpSaveDeviceCapabilities
01 nt!IopQueryAndSaveDeviceNodeCapabilities
02 nt!PipProcessStartPhase3
03 nt!PipProcessDevNodeTree
04 nt!PipDeviceActionWorker
05 nt!PipRequestDeviceAction
06 nt!IopInitializeBootDrivers
07 nt!IoInitSystem
08 nt!Phase1Initialization
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
0: kd> dv
DeviceNode = 0x899c1008
Capabilities = 0xf789a2f4
unicodeName = struct _UNICODE_STRING ""
handle = 0x00000008
status = 0n-1986260984
value = 0x80c8924a
0: kd> dx -r1 ((ntkrnlmp!_DEVICE_CAPABILITIES *)0xf789a2f4)
((ntkrnlmp!_DEVICE_CAPABILITIES *)0xf789a2f4) : 0xf789a2f4 [Type: _DEVICE_CAPABILITIES *]
[+0x000] Size : 0x40 [Type: unsigned short]
[+0x002] Version : 0x1 [Type: unsigned short]
[+0x004 ( 0: 0)] DeviceD1 : 0x0 [Type: unsigned long]
[+0x004 ( 1: 1)] DeviceD2 : 0x0 [Type: unsigned long]
[+0x004 ( 2: 2)] LockSupported : 0x0 [Type: unsigned long]
[+0x004 ( 3: 3)] EjectSupported : 0x0 [Type: unsigned long]
[+0x004 ( 4: 4)] Removable : 0x0 [Type: unsigned long]
[+0x004 ( 5: 5)] DockDevice : 0x0 [Type: unsigned long]
[+0x004 ( 6: 6)] UniqueID : 0x1 [Type: unsigned long]
[+0x004 ( 7: 7)] SilentInstall : 0x1 [Type: unsigned long]
[+0x004 ( 8: 8)] RawDeviceOK : 0x0 [Type: unsigned long]
[+0x004 ( 9: 9)] SurpriseRemovalOK : 0x0 [Type: unsigned long]
[+0x004 (10:10)] WakeFromD0 : 0x0 [Type: unsigned long]
[+0x004 (11:11)] WakeFromD1 : 0x0 [Type: unsigned long]
[+0x004 (12:12)] WakeFromD2 : 0x0 [Type: unsigned long]
[+0x004 (13:13)] WakeFromD3 : 0x0 [Type: unsigned long]
[+0x004 (14:14)] HardwareDisabled : 0x0 [Type: unsigned long]
[+0x004 (15:15)] NonDynamic : 0x0 [Type: unsigned long]
[+0x004 (16:16)] WarmEjectSupported : 0x0 [Type: unsigned long]
[+0x004 (17:17)] NoDisplayInUI : 0x0 [Type: unsigned long]
[+0x004 (31:18)] Reserved : 0x0 [Type: unsigned long]
[+0x008] Address : 0xffffffff [Type: unsigned long]
[+0x00c] UINumber : 0xffffffff [Type: unsigned long]
[+0x010] DeviceState [Type: _DEVICE_POWER_STATE [7]]
[+0x02c] SystemWake : PowerSystemUnspecified (0) [Type: _SYSTEM_POWER_STATE]
[+0x030] DeviceWake : PowerDeviceUnspecified (0) [Type: _DEVICE_POWER_STATE]
[+0x034] D1Latency : 0x0 [Type: unsigned long]
[+0x038] D2Latency : 0x0 [Type: unsigned long]
[+0x03c] D3Latency : 0x0 [Type: unsigned long]
0: kd> dx -r1 (*((ntkrnlmp!_DEVICE_POWER_STATE (*)[7])0xf789a304))
(*((ntkrnlmp!_DEVICE_POWER_STATE (*)[7])0xf789a304)) [Type: _DEVICE_POWER_STATE [7]]
[0] : PowerDeviceUnspecified (0) [Type: _DEVICE_POWER_STATE]
[1] : PowerDeviceD0 (1) [Type: _DEVICE_POWER_STATE]
[2] : PowerDeviceD1 (2) [Type: _DEVICE_POWER_STATE]
[3] : PowerDeviceUnspecified (0) [Type: _DEVICE_POWER_STATE]
[4] : PowerDeviceUnspecified (0) [Type: _DEVICE_POWER_STATE]
[5] : PowerDeviceD3 (4) [Type: _DEVICE_POWER_STATE]
[6] : PowerDeviceD3 (4) [Type: _DEVICE_POWER_STATE]


//
// Open the device instance key
//
status = IopDeviceObjectToDeviceInstance(DeviceNode->PhysicalDeviceObject, &handle, KEY_ALL_ACCESS);
if (NT_SUCCESS(status)) {


0: kd> dv
DeviceNode = 0x899c1008
Capabilities = 0xf789a2f4
unicodeName = ""
handle = 0x8000027c
status = 0n-1986260984
value = 8
0: kd> !handle 27c

PROCESS 899a2278 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000
DirBase: 0a200000 ObjectTable: e1000e38 HandleCount: 33.
Image: System

Kernel handle table at e1000e38 with 33 entries in use

027c: Object: e127f5e0 GrantedAccess: 000f003f Entry: e10044f8
Object: e127f5e0 Type: (89996048) Key
ObjectHeader: e127f5c8 (old version)
HandleCount: 1 PointerCount: 1
Directory Object: 00000000 Name: \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\ENUM\ACPI_HAL\PNP0C08\0


value = (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);

PiWstrToUnicodeString(&unicodeName, REGSTR_VALUE_CAPABILITIES);
ZwSetValueKey(
handle,
&unicodeName,
TITLE_INDEX_VALUE,
REG_DWORD,
&value,
sizeof(value));


0: kd> t
eax=f789a2d0 ebx=00000000 ecx=00000030 edx=80a3d105 esi=f789a2f4 edi=00000004
eip=80a3e2d8 esp=f789a2a8 ebp=f789a2e0 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
nt!ZwSetValueKey:
80a3e2d8 b800010000 mov eax,100h
0: kd> dv
0: kd> kc
#
00 nt!ZwSetValueKey
01 nt!PpSaveDeviceCapabilities
02 nt!IopQueryAndSaveDeviceNodeCapabilities
03 nt!PipProcessStartPhase3
04 nt!PipProcessDevNodeTree
05 nt!PipDeviceActionWorker
06 nt!PipRequestDeviceAction
07 nt!IopInitializeBootDrivers
08 nt!IoInitSystem
09 nt!Phase1Initialization
0a nt!PspSystemThreadStartup
0b nt!KiThreadStartup
0: kd> dv
0: kd> r
eax=f789a2d0 ebx=00000000 ecx=00000030 edx=80a3d105 esi=f789a2f4 edi=00000004
eip=80a3e2d8 esp=f789a2a8 ebp=f789a2e0 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
nt!ZwSetValueKey:
80a3e2d8 b800010000 mov eax,100h

0: kd> dd f789a2a8
f789a2a8 80c8933e 8000027c f789a2d0 00000000
f789a2b8 00000004 f789a2d8 00000004 899c1008
f789a2c8 899c1008 00000000 001a0018 80c891da
f789a2d8 00000030 8000027c f789a334 80c8bea4
f789a2e8 00000000 f789a2f4 804edc6c 00010040
f789a2f8 000000c0 ffffffff ffffffff 00000000
f789a308 00000001 00000002 00000000 00000000
f789a318 00000004 00000004 00000000 00000000

0: kd> dd f789a2d0
f789a2d0 001a0018 80c891da 00000030 8000027c

0: kd> dv
DeviceNode = 0x00000000
Capabilities = 0xf789a2f4
unicodeName = "Capabilities"
handle = 0x8000027c
status = 0n0
value = 0x30
0011 0000

0: kd> dx -r1 ((ntkrnlmp!_DEVICE_CAPABILITIES *)0xf789a2f4)
((ntkrnlmp!_DEVICE_CAPABILITIES *)0xf789a2f4) : 0xf789a2f4 [Type: _DEVICE_CAPABILITIES *]
[+0x000] Size : 0x40 [Type: unsigned short]
[+0x002] Version : 0x1 [Type: unsigned short]
[+0x004 ( 0: 0)] DeviceD1 : 0x0 [Type: unsigned long]
[+0x004 ( 1: 1)] DeviceD2 : 0x0 [Type: unsigned long]
[+0x004 ( 2: 2)] LockSupported : 0x0 [Type: unsigned long]
[+0x004 ( 3: 3)] EjectSupported : 0x0 [Type: unsigned long]
[+0x004 ( 4: 4)] Removable : 0x0 [Type: unsigned long]
[+0x004 ( 5: 5)] DockDevice : 0x0 [Type: unsigned long]
[+0x004 ( 6: 6)] UniqueID : 0x1 [Type: unsigned long]
[+0x004 ( 7: 7)] SilentInstall : 0x1 [Type: unsigned long]
[+0x004 ( 8: 8)] RawDeviceOK : 0x0 [Type: unsigned long]
[+0x004 ( 9: 9)] SurpriseRemovalOK : 0x0 [Type: unsigned long]


[+0x004 ( 6: 6)] UniqueID : 0x1 [Type: unsigned long]
[+0x004 ( 7: 7)] SilentInstall : 0x1 [Type: unsigned long]


(Capabilities->UniqueID << 4) |
(Capabilities->SilentInstall << 5) |


第四位和第五位为1。
0: kd> dv value
value = 0x30

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 22:07:54

【年度测评】2026年AI写小说软件哪个好用?从卡文到日更过万,亲测这6款神器轻松搞定大纲与正文

做网文自媒体3年&#xff0c;我太懂那种对着屏幕发呆、烟灰缸塞满烟头却憋不出三个字的痛苦了。 这两年 ai写小说 的风很大&#xff0c;很多粉丝在后台私信问我&#xff1a;“我看别人用AI一天能日更两万字&#xff0c;到底是真能用还是收智商税&#xff1f;”、“为什么我用C…

作者头像 李华
网站建设 2026/4/13 23:46:35

Java摄影约拍:线上预约系统源码全揭秘

以下是一套基于Java的摄影约拍线上预约系统源码的技术实现方案与核心功能设计&#xff0c;涵盖可直接复用的代码片段与架构说明&#xff1a; 一、技术架构 后端框架&#xff1a;采用Spring Boot 2.7构建微服务&#xff0c;结合Spring Cloud实现服务拆分与弹性扩展。通过Nacos…

作者头像 李华
网站建设 2026/4/20 1:19:01

Infineon英飞凌 FF600R12KT4 IGBT管/模块

特性 电气特性 额定电压1200V 额定电流c nom600A/最大连续电流icRM1200A -无与伦比的坚固性-扩展工作温度Tvjop -低开关损耗 - 低VcEsat-具有正温度系数的VcEsat机械特性 -4kV交流1分钟绝缘-包装中CTI大于400 -高爬电距离和电气间隙 -高功率密度 -隔离底板-标准外壳

作者头像 李华
网站建设 2026/4/17 13:36:56

OpenHarmony环境下React Native:SearchBar搜索建议

OpenHarmony环境下React Native&#xff1a;SearchBar搜索建议 摘要 本文将深入探讨如何在OpenHarmony 6.0.0 (API 20)环境下使用React Native 0.72.5实现SearchBar搜索建议功能。通过详细分析SearchBar组件在跨平台开发中的适配要点&#xff0c;结合流程图和对比表格展示技术…

作者头像 李华
网站建设 2026/4/18 12:09:31

Jmeter的进阶功能

1. 逻辑控制器 1. if逻辑控制器 要求&#xff1a;如果用户是张三我们就发送一个百度请求&#xff0c;否则就不发送。 新增一个用户变量 userName 新增一个逻辑控制器 > if控制器 把http请求拖到if控制器下面&#xff0c;让if控制器成为Http请求的父亲 执行发现条件满足&a…

作者头像 李华