news 2026/3/30 6:42:12

nt!PiBuildDeviceNodeInstancePath函数分析和DeviceNode->InstancePath的由来--重要

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!PiBuildDeviceNodeInstancePath函数分析和DeviceNode->InstancePath的由来--重要

nt!PiBuildDeviceNodeInstancePath函数分析和DeviceNode->InstancePath的由来--重要

NTSTATUS
PiProcessNewDeviceNode(
IN PDEVICE_NODE DeviceNode

)
{


status =PipMakeGloballyUniqueId(deviceObject, instanceID, &uniqueInstanceID);

if (instanceID != NULL) {

ExFreePool(instanceID);
}
instanceID = uniqueInstanceID;


0: kd> dv uniqueInstanceID
uniqueInstanceID = 0xe1285440
0: kd> dx -r1 ((ntkrnlmp!unsigned short *)0xe1285440)
((ntkrnlmp!unsigned short *)0xe1285440) : 0xe1285440 : 0x32 [Type: unsigned short *]
0x32 [Type: unsigned short]
0: kd> db 0xe1285440
e1285440 32 00 26 00 64 00 61 00-62 00 61 00 33 00 66 00 2.&.d.a.b.a.3.f.
e1285450 66 00 26 00 30 00 00 00-4c 49 53 54 70 b2 b2 b2 f.&.0...LISTp...


0: kd> dt _device_node 0x894ffea8
nt!_DEVICE_NODE
+0x000 Sibling : 0x8952a1e0 _DEVICE_NODE
+0x004 Child : (null)
+0x008 Parent : 0x899c1008 _DEVICE_NODE
+0x00c LastChild : (null)
+0x010 Level : 3
+0x014 Notify : (null)
+0x018 State : 301 ( DeviceNodeUninitialized )
+0x01c PreviousState : 0 (No matching name)
+0x020 StateHistory : [20] 0 (No matching name)
+0x070 StateHistoryEntry : 0
+0x074 CompletionStatus : 0n0
+0x078 PendingIrp : (null)
+0x07c Flags : 0x10
+0x080 UserFlags : 0
+0x084 Problem : 0
+0x088 PhysicalDeviceObject : 0x899050e8 _DEVICE_OBJECT
+0x08c ResourceList : (null)
+0x090 ResourceListTranslated : (null)
+0x094 InstancePath : _UNICODE_STRING "" 还没赋值
+0x09c ServiceName : _UNICODE_STRING ""
+0x0a4 DuplicatePDO : (null)
+0x0a8 ResourceRequirements : (null)
+0x0ac InterfaceType : 0xffffffff (No matching name)
+0x0b0 BusNumber : 0xffffffff
+0x0b4 ChildInterfaceType : 0xffffffff (No matching name)
+0x0b8 ChildBusNumber : 0xffffffff
+0x0bc ChildBusTypeIndex : 0xffff
+0x0be RemovalPolicy : 0 ''
+0x0bf HardwareRemovalPolicy : 0 ''
+0x0c0 TargetDeviceNotify : _LIST_ENTRY [ 0x894fff68 - 0x894fff68 ]
+0x0c8 DeviceArbiterList : _LIST_ENTRY [ 0x894fff70 - 0x894fff70 ]
+0x0d0 DeviceTranslatorList : _LIST_ENTRY [ 0x894fff78 - 0x894fff78 ]
+0x0d8 NoTranslatorMask : 0
+0x0da QueryTranslatorMask : 0
+0x0dc NoArbiterMask : 0
+0x0de QueryArbiterMask : 0
+0x0e0 OverUsed1 : __unnamed
+0x0e4 OverUsed2 : __unnamed
+0x0e8 BootResources : (null)
+0x0ec CapabilityFlags : 0
+0x0f0 DockInfo : __unnamed
+0x100 DisableableDepends : 0
+0x104 PendedSetInterfaceState : _LIST_ENTRY [ 0x894fffac - 0x894fffac ]
+0x10c LegacyBusListEntry : _LIST_ENTRY [ 0x894fffb4 - 0x894fffb4 ]
0: kd> dx -id 0,0,899a2278 -r1 ((ntkrnlmp!_DEVICE_OBJECT *)0x899050e8)
((ntkrnlmp!_DEVICE_OBJECT *)0x899050e8) : 0x899050e8 : Device for "\Driver\ACPI" [Type: _DEVICE_OBJECT *]
[<Raw View>] [Type: _DEVICE_OBJECT]
Flags : 0x1040
UpperDevices : None
LowerDevices : None
Driver : 0x89981f38 : Driver "\Driver\ACPI" [Type: _DRIVER_OBJECT *]
0: kd> dx -id 0,0,899a2278 -r1 -nv (*((ntkrnlmp!_DEVICE_OBJECT *)0x899050e8))
(*((ntkrnlmp!_DEVICE_OBJECT *)0x899050e8)) : Device for "\Driver\ACPI" [Type: _DEVICE_OBJECT]
[+0x000] Type : 3 [Type: short]
[+0x002] Size : 0xb8 [Type: unsigned short]
[+0x004] ReferenceCount : 0 [Type: long]
[+0x008] DriverObject : 0x89981f38 : Driver "\Driver\ACPI" [Type: _DRIVER_OBJECT *]
[+0x00c] NextDevice : 0x89981b98 : Device for "\Driver\ACPI" [Type: _DEVICE_OBJECT *]
[+0x010] AttachedDevice : 0x0 [Type: _DEVICE_OBJECT *]
[+0x014] CurrentIrp : 0x0 [Type: _IRP *]
[+0x018] Timer : 0x0 [Type: _IO_TIMER *]
[+0x01c] Flags : 0x1040 [Type: unsigned long]
[+0x020] Characteristics : 0x80 [Type: unsigned long]
[+0x024] Vpb : 0x0 [Type: _VPB *]
[+0x028] DeviceExtension : 0x899c0d58 [Type: void *]
[+0x02c] DeviceType : 0x32 [Type: unsigned long]
[+0x030] StackSize : 1 [Type: char]
[+0x034] Queue [Type: __unnamed]
[+0x05c] AlignmentRequirement : 0x0 [Type: unsigned long]
[+0x060] DeviceQueue [Type: _KDEVICE_QUEUE]
[+0x074] Dpc [Type: _KDPC]
[+0x094] ActiveThreadCount : 0x0 [Type: unsigned long]
[+0x098] SecurityDescriptor : 0xe1297680 [Type: void *]
[+0x09c] DeviceLock [Type: _KEVENT]
[+0x0ac] SectorSize : 0x0 [Type: unsigned short]
[+0x0ae] Spare1 : 0x0 [Type: unsigned short]
[+0x0b0] DeviceObjectExtension : 0x899051a0 [Type: _DEVOBJ_EXTENSION *]
[+0x0b4] Reserved : 0x0 [Type: void *]
0: kd> dt acpi!_Device_Extension 0x899c0d58
+0x000 Flags : 0x05402000`02010020
+0x000 UFlags : __unnamed
+0x008 Signature : 0x5f534750
+0x00c DebugFlags : 0
+0x010 DispatchTable : 0xf743830c IRP_DISPATCH_TABLE
+0x014 WorkContext : WORK_QUEUE_CONTEXT
+0x014 Fdo : _FDO_DEVICE_EXTENSION
+0x014 Filter : _FILTER_DEVICE_EXTENSION
+0x014 Pdo : _PDO_DEVICE_EXTENSION
+0x058 WorkQueue : EXTENSION_WORKER
+0x058 Button : BUTTON_EXTENSION
+0x058 Thermal : THERMAL_EXTENSION
+0x058 LinkNode : LINK_NODE_EXTENSION
+0x058 Dock : DOCK_EXTENSION
+0x058 Processor : _PROCESSOR_DEVICE_EXTENSION
+0x088 DeviceState : 0 ( Stopped )
+0x08c PreviousState : 0 ( Stopped )
+0x090 PowerInfo : _ACPI_POWER_INFO
+0x10c DeviceID : 0x899c1148 "ACPI\PNP0A03"
+0x10c Address : 0x899c1148
+0x110 InstanceID : (null) 还没有赋值
+0x114 ResourceList : (null)
+0x118 PnpResourceList : (null)
+0x11c OutstandingIrpCount : 0n1
+0x120 ReferenceCount : 0n83
+0x124 HibernatePathCount : 0n0
+0x128 RemoveEvent : (null)
+0x12c AcpiObject : 0x899affac _NSObj
+0x130 DeviceObject : 0x899050e8 _DEVICE_OBJECT
+0x134 TargetDeviceObject : (null)
+0x138 PhysicalDeviceObject : 0x899050e8 _DEVICE_OBJECT
+0x13c ParentExtension : 0x89981a18 _DEVICE_EXTENSION
+0x140 ChildDeviceList : _LIST_ENTRY [ 0x899c0d38 - 0x8990efe8 ]
+0x148 SiblingDeviceList : _LIST_ENTRY [ 0x899ae150 - 0x89981b58 ]
+0x150 EjectDeviceHead : _LIST_ENTRY [ 0x899c0ea8 - 0x899c0ea8 ]
+0x158 EjectDeviceList : _LIST_ENTRY [ 0x899c0eb0 - 0x899c0eb0 ]
0: kd> db 0x899affac
899affac 4c ff 9a 89 ac 40 9b 89-f0 f0 9a 89 24 00 9b 89 L....@......$...
899affbc 50 43 49 30 30 f3 9a 89-4c ff 9a 89 00 00 06 00 PCI00...L.......

//
// Build the device instance path and create the instance key.
//
status = PiBuildDeviceNodeInstancePath(DeviceNode, busID, deviceID, instanceID);
if (NT_SUCCESS(status)) {

status = PiCreateDeviceInstanceKey(DeviceNode, &instanceKey, &disposition);
}

0: kd> kc
#
00 nt!PiBuildDeviceNodeInstancePath
01 nt!PiProcessNewDeviceNode
02 nt!PipProcessDevNodeTree
03 nt!PipDeviceActionWorker
04 nt!PipRequestDeviceAction
05 nt!IopInitializeBootDrivers
06 nt!IoInitSystem
07 nt!Phase1Initialization
08 nt!PspSystemThreadStartup
09 nt!KiThreadStartup
0: kd> dv
DeviceNode = 0x894ffea8
BusID = 0xe1271120
DeviceID = 0xe127112a
InstanceID = 0xe1285440
0: kd> dx -r1 ((ntkrnlmp!unsigned short *)0xe1271120)
((ntkrnlmp!unsigned short *)0xe1271120) : 0xe1271120 : 0x41 [Type: unsigned short *]
0x41 [Type: unsigned short]
0: kd> db 0xe1271120
e1271120 41 00 43 00 50 00 49 00-00 00 50 00 4e 00 50 00 A.C.P.I...P.N.P.
e1271130 30 00 41 00 30 00 33 00-00 00 55 52 43 45 53 79 0.A.0.3...URCESy
e1271140 05 04 07 04 43 4d 56 49-88 21 27 e1 19 cb 27 e1 ....CMVI.!'...'.
e1271150 69 3a 27 e1 59 eb 28 e1-e1 d5 26 e1 11 81 27 e1 i:'.Y.(...&...'.
e1271160 29 6f 29 e1 31 d1 29 e1-99 0e 29 e1 e1 49 29 e1 )o).1.)...)..I).
e1271170 b1 61 28 e1 64 b2 b2 b2-07 04 02 00 4f 62 53 71 .a(.d.......ObSq
e1271180 d1 92 27 e1 31 1b 27 e1-02 04 02 0c 4f 62 44 69 ..'.1.'.....ObDi
e1271190 00 00 00 00 e8 78 98 89-02 04 21 0c 43 4d 33 39 .....x....!.CM39
0: kd> db 0xe127112a
e127112a 50 00 4e 00 50 00 30 00-41 00 30 00 33 00 00 00 P.N.P.0.A.0.3...
e127113a 55 52 43 45 53 79 05 04-07 04 43 4d 56 49 88 21 URCESy....CMVI.!
e127114a 27 e1 19 cb 27 e1 69 3a-27 e1 59 eb 28 e1 e1 d5 '...'.i:'.Y.(...
e127115a 26 e1 11 81 27 e1 29 6f-29 e1 31 d1 29 e1 99 0e &...'.)o).1.)...
e127116a 29 e1 e1 49 29 e1 b1 61-28 e1 64 b2 b2 b2 07 04 )..I)..a(.d.....
e127117a 02 00 4f 62 53 71 d1 92-27 e1 31 1b 27 e1 02 04 ..ObSq..'.1.'...
e127118a 02 0c 4f 62 44 69 00 00-00 00 e8 78 98 89 02 04 ..ObDi.....x....
e127119a 21 0c 43 4d 33 39 00 00-00 00 00 00 00 00 00 00 !.CM39..........
0: kd> db 0xe1285440
e1285440 32 00 26 00 64 00 61 00-62 00 61 00 33 00 66 00 2.&.d.a.b.a.3.f.
e1285450 66 00 26 00 30 00 00 00-4c 49 53 54 70 b2 b2 b2 f.&.0...LISTp...


0: kd> dx -r1 ((ntkrnlmp!_DEVICE_NODE *)0x899c1008)
((ntkrnlmp!_DEVICE_NODE *)0x899c1008) : 0x899c1008 [Type: _DEVICE_NODE *]
[+0x000] Sibling : 0x0 [Type: _DEVICE_NODE *]
[+0x004] Child : 0x894ffea8 [Type: _DEVICE_NODE *]
[+0x008] Parent : 0x89986008 [Type: _DEVICE_NODE *]
[+0x00c] LastChild : 0x8952a500 [Type: _DEVICE_NODE *]
[+0x010] Level : 0x2 [Type: unsigned long]
[+0x014] Notify : 0x0 [Type: _PO_DEVICE_NOTIFY *]
[+0x018] State : DeviceNodeStarted (776) [Type: _PNP_DEVNODE_STATE]
[+0x01c] PreviousState : DeviceNodeEnumerateCompletion (781) [Type: _PNP_DEVNODE_STATE]
[+0x020] StateHistory [Type: _PNP_DEVNODE_STATE [20]]
[+0x070] StateHistoryEntry : 0x8 [Type: unsigned long]
[+0x074] CompletionStatus : 0 [Type: long]
[+0x078] PendingIrp : 0x0 [Type: _IRP *]
[+0x07c] Flags : 0xf0 [Type: unsigned long]
[+0x080] UserFlags : 0x0 [Type: unsigned long]
[+0x084] Problem : 0x0 [Type: unsigned long]
[+0x088] PhysicalDeviceObject : 0x899c1de0 : Device for "\Driver\ACPI_HAL" [Type: _DEVICE_OBJECT *]
[+0x08c] ResourceList : 0xe127b758 [Type: _CM_RESOURCE_LIST *]
[+0x090] ResourceListTranslated : 0xe127fe58 [Type: _CM_RESOURCE_LIST *]
[+0x094] InstancePath : "ACPI_HAL\PNP0C08\0" [Type: _UNICODE_STRING]

参考结果:
DevNode 0x89db5008 for PDO 0x89db5cb8
InstancePath is "ACPI_HAL\PNP0C08\0"
ServiceName is "ACPI"
State = DeviceNodeStarted (0x308)
Previous State = DeviceNodeEnumerateCompletion (0x30d)
DevNode 0x89d26558 for PDO 0x89d38bf0
InstancePath is "ACPI\PNP0A03\2&daba3ff&0"
ServiceName is "pci"
State = DeviceNodeStarted (0x308)
Previous State = DeviceNodeEnumerateCompletion (0x30d)
参考结果:

//
// Construct the instance path as <BUS>\<DEVICE>\<INSTANCE>. This should always be NULL terminated
// since we have precomputed the length that we pass into this counted routine.
//
StringCbPrintfW(instancePath, length, L"%s\\%s\\%s", BusID, DeviceID, InstanceID);


0: kd> gu
eax=00000000 ebx=00000000 ecx=00000030 edx=894fff3c esi=894ffea8 edi=899050e8
eip=80c93a98 esp=f789a2e0 ebp=f789a38c iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!PiProcessNewDeviceNode+0x216:
80c93a98 3bc3 cmp eax,ebx
0: kd> dx -r1 ((ntkrnlmp!_DEVICE_NODE *)0x894ffea8)
((ntkrnlmp!_DEVICE_NODE *)0x894ffea8) : 0x894ffea8 [Type: _DEVICE_NODE *]
[+0x000] Sibling : 0x8952a1e0 [Type: _DEVICE_NODE *]
[+0x004] Child : 0x0 [Type: _DEVICE_NODE *]
[+0x008] Parent : 0x899c1008 [Type: _DEVICE_NODE *]
[+0x00c] LastChild : 0x0 [Type: _DEVICE_NODE *]
[+0x010] Level : 0x3 [Type: unsigned long]
[+0x014] Notify : 0x0 [Type: _PO_DEVICE_NOTIFY *]
[+0x018] State : DeviceNodeUninitialized (769) [Type: _PNP_DEVNODE_STATE]
[+0x01c] PreviousState : 0 [Type: _PNP_DEVNODE_STATE]
[+0x020] StateHistory [Type: _PNP_DEVNODE_STATE [20]]
[+0x070] StateHistoryEntry : 0x0 [Type: unsigned long]
[+0x074] CompletionStatus : 0 [Type: long]
[+0x078] PendingIrp : 0x0 [Type: _IRP *]
[+0x07c] Flags : 0x10 [Type: unsigned long]
[+0x080] UserFlags : 0x0 [Type: unsigned long]
[+0x084] Problem : 0x0 [Type: unsigned long]
[+0x088] PhysicalDeviceObject : 0x899050e8 : Device for "\Driver\ACPI" [Type: _DEVICE_OBJECT *]
[+0x08c] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x090] ResourceListTranslated : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x094] InstancePath :"ACPI\PNP0A03\2&daba3ff&0"[Type: _UNICODE_STRING]

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

IPA 重签名插件上传 + 添加保姆级教程!顺便安利神仙工具 moooke

宝子们&#xff01;好多人问我签名应用的时候&#xff0c;插件到底该在哪上传、怎么添加&#xff0c;今天就把压箱底的工具和教程分享给你们&#xff0c;还能帮你们的内容更容易被搜到哦&#xff5e; 签名应用需要插件&#xff0c;那在哪里上传插件和添加插件呢&#xff1f; …

作者头像 李华
网站建设 2026/3/25 9:07:14

将Map转成对应实体

将Map转成对应实体&#xff0c;但存在字段类型对不上&#xff0c;比如map里面是字符串&#xff08;存在非数字字符&#xff09;&#xff0c;但实体是double&#xff0c;map不需要和实体一一对应&#xff0c;map中有的字段&#xff0c;实体没有&#xff0c;则不会转换&#xff0…

作者头像 李华
网站建设 2026/3/21 0:19:00

Java基于Spring Boot+Vue的在线学习管理系统

所需该项目可以在最下面查看联系方式&#xff0c;为防止迷路可以收藏文章&#xff0c;以防后期找不到 这里写目录标题 项目介绍系统实现截图技术栈介绍Spring Boot与Vue结合使用的优势Spring Boot的优点Vue的优点 Spring Boot 框架结构解析Vue介绍系统执行流程Java语言介绍系统…

作者头像 李华
网站建设 2026/3/16 10:58:36

电商视频自动剪辑利器:揭秘多场景裂变批量生成技术

你是否好奇&#xff0c;为何一些电商工作室能日更数百条带货视频&#xff1f;这背后并非单纯依靠人力堆砌&#xff0c;而是借助了高效的自动化视频剪辑工具。如果仍停留在手动剪辑或简单的抽帧变速阶段&#xff0c;效率瓶颈将难以突破。 本文将深度解析一款工作室同款的电商带…

作者头像 李华
网站建设 2026/3/27 7:42:44

教学演示首选!4K 高清录屏神器 免费汉化无广告 自带标注工具

下载链接 https://pan.freedw.com/s/idSQ1C 又挖到一款宝藏录屏工具&#xff01;这款录屏神器主打 4K 高清录制&#xff0c;专为教学演示、游戏录制量身打造&#xff0c;还支持摄像头与音频同步录制&#xff0c;关键是纯免费汉化版&#xff0c;无广告、体积小巧&#xff0c;上…

作者头像 李华