news 2026/4/22 19:10:09

nt!PipProcessStartPhase3函数分析之nt!PipSetDevNodeState

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!PipProcessStartPhase3函数分析之nt!PipSetDevNodeState

nt!PipProcessStartPhase3函数分析之nt!PipSetDevNodeState

0: kd> p
eax=00000000 ebx=00000000 ecx=80b1f6f8 edx=00000000 esi=89986898 edi=80b1f6f8
eip=80a2ece0 esp=f789a294 ebp=f789a2a0 iopl=0 nv up ei ng nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000286
nt!PipSetDevNodeState+0x6c:
80a2ece0 8b5e18 mov ebx,dword ptr [esi+18h] ds:0023:899868b0=00000307
0: kd> dt _device_node 89986898
nt!_DEVICE_NODE
+0x000 Sibling : 0x89986648 _DEVICE_NODE
+0x004 Child : (null)
+0x008 Parent : 0x899c5bc8 _DEVICE_NODE
+0x00c LastChild : (null)
+0x010 Level : 1
+0x014 Notify : (null)
+0x018 State : 307 ( DeviceNodeStartPostWork )
+0x01c PreviousState : 302 ( DeviceNodeInitialized )
+0x020 StateHistory : [20] 301 ( DeviceNodeUninitialized )
+0x070 StateHistoryEntry : 2
+0x074 CompletionStatus : 0n0
+0x078 PendingIrp : (null)
+0x07c Flags : 0x139
+0x080 UserFlags : 0xa
+0x084 Problem : 0
+0x088 PhysicalDeviceObject : 0x899869f0 _DEVICE_OBJECT
+0x08c ResourceList : (null)
+0x090 ResourceListTranslated : (null)
+0x094 InstancePath : _UNICODE_STRING "Root\ftdisk\0000"
+0x09c ServiceName : _UNICODE_STRING "ftdisk"
+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 [ 0x89986958 - 0x89986958 ]
+0x0c8 DeviceArbiterList : _LIST_ENTRY [ 0x89986960 - 0x89986960 ]
+0x0d0 DeviceTranslatorList : _LIST_ENTRY [ 0x89986968 - 0x89986968 ]
+0x0d8 NoTranslatorMask : 0
+0x0da QueryTranslatorMask : 0
+0x0dc NoArbiterMask : 0
+0x0de QueryArbiterMask : 0
+0x0e0 OverUsed1 : __unnamed
+0x0e4 OverUsed2 : __unnamed
+0x0e8 BootResources : (null)
+0x0ec CapabilityFlags : 0x180
+0x0f0 DockInfo : __unnamed
+0x100 DisableableDepends : 1
+0x104 PendedSetInterfaceState : _LIST_ENTRY [ 0x8998699c - 0x8998699c ]
+0x10c LegacyBusListEntry : _LIST_ENTRY [ 0x899869a4 - 0x899869a4 ]
0: kd> dv
DeviceNode = 0x89986898
State = DeviceNodeStarted (0n776)
OldState = 0x00000000
oldIrql = 0x89 ''
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_PNP_DEVNODE_STATE (*)[20])0x899868b8))
(*((ntkrnlmp!_PNP_DEVNODE_STATE (*)[20])0x899868b8)) [Type: _PNP_DEVNODE_STATE [20]]
[0] : DeviceNodeUninitialized (769) [Type: _PNP_DEVNODE_STATE]
[1] : DeviceNodeInitialized (770) [Type: _PNP_DEVNODE_STATE]

[2] : 0 [Type: _PNP_DEVNODE_STATE]
[3] : 0 [Type: _PNP_DEVNODE_STATE]
[4] : 0 [Type: _PNP_DEVNODE_STATE]
[5] : 0 [Type: _PNP_DEVNODE_STATE]
[6] : 0 [Type: _PNP_DEVNODE_STATE]
[7] : 0 [Type: _PNP_DEVNODE_STATE]
[8] : 0 [Type: _PNP_DEVNODE_STATE]
[9] : 0 [Type: _PNP_DEVNODE_STATE]
[10] : 0 [Type: _PNP_DEVNODE_STATE]
[11] : 0 [Type: _PNP_DEVNODE_STATE]
[12] : 0 [Type: _PNP_DEVNODE_STATE]
[13] : 0 [Type: _PNP_DEVNODE_STATE]
[14] : 0 [Type: _PNP_DEVNODE_STATE]
[15] : 0 [Type: _PNP_DEVNODE_STATE]
[16] : 0 [Type: _PNP_DEVNODE_STATE]
[17] : 0 [Type: _PNP_DEVNODE_STATE]
[18] : 0 [Type: _PNP_DEVNODE_STATE]
[19] : 0 [Type: _PNP_DEVNODE_STATE]


0: kd> kc
#
00 nt!PipSetDevNodeState
01 nt!PipProcessStartPhase3
02 nt!PipProcessDevNodeTree
03 nt!PiProcessReenumeration
04 nt!PipDeviceActionWorker
05 nt!PipRequestDeviceAction
06 nt!PipAddDevicesToBootDriverWorker
07 nt!PipApplyFunctionToServiceInstances
08 nt!PipAddDevicesToBootDriver
09 nt!IopInitializeBootDrivers
0a nt!IoInitSystem
0b nt!Phase1Initialization
0c nt!PspSystemThreadStartup
0d nt!KiThreadStartup
0: kd> dv
DeviceNode = 0x89986898
State = DeviceNodeStarted (0n776)
OldState = 0x00000000
oldIrql = 0x89 ''


if (DeviceNode->State != State) {

//
// Update the devnode's current and previous state.
//
DeviceNode->State = State;
DeviceNode->PreviousState = previousState;

//
// Push prior state onto the history stack.
//
DeviceNode->StateHistory[DeviceNode->StateHistoryEntry] = previousState;
DeviceNode->StateHistoryEntry++;
DeviceNode->StateHistoryEntry %= STATE_HISTORY_SIZE;
}


0: kd> dt _device_node 89986898
nt!_DEVICE_NODE
+0x000 Sibling : 0x89986648 _DEVICE_NODE
+0x004 Child : (null)
+0x008 Parent : 0x899c5bc8 _DEVICE_NODE
+0x00c LastChild : (null)
+0x010 Level : 1
+0x014 Notify : (null)
+0x018 State : 307 ( DeviceNodeStartPostWork )
+0x01c PreviousState : 302 ( DeviceNodeInitialized )
+0x020 StateHistory : [20] 301 ( DeviceNodeUninitialized )
+0x070 StateHistoryEntry : 2

IopDbgPrint((IOP_INFO_LEVEL,
"%wZ: %s => %s\n",
&DeviceNode->InstancePath,
PP_DEVNODESTATE_NAME(previousState),
PP_DEVNODESTATE_NAME(State)));


0: kd> dt _device_node 89986898
nt!_DEVICE_NODE
+0x000 Sibling : 0x89986648 _DEVICE_NODE
+0x004 Child : (null)
+0x008 Parent : 0x899c5bc8 _DEVICE_NODE
+0x00c LastChild : (null)
+0x010 Level : 1
+0x014 Notify : (null)
+0x018 State : 308 ( DeviceNodeStarted )
+0x01c PreviousState : 307 ( DeviceNodeStartPostWork )
+0x020 StateHistory : [20] 301 ( DeviceNodeUninitialized )
+0x070 StateHistoryEntry : 3
+0x074 CompletionStatus : 0n0
+0x078 PendingIrp : (null)
+0x07c Flags : 0x139
+0x080 UserFlags : 0xa
+0x084 Problem : 0
+0x088 PhysicalDeviceObject : 0x899869f0 _DEVICE_OBJECT
+0x08c ResourceList : (null)
+0x090 ResourceListTranslated : (null)
+0x094 InstancePath : _UNICODE_STRING "Root\ftdisk\0000"
+0x09c ServiceName : _UNICODE_STRING "ftdisk"
+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 [ 0x89986958 - 0x89986958 ]
+0x0c8 DeviceArbiterList : _LIST_ENTRY [ 0x89986960 - 0x89986960 ]
+0x0d0 DeviceTranslatorList : _LIST_ENTRY [ 0x89986968 - 0x89986968 ]
+0x0d8 NoTranslatorMask : 0
+0x0da QueryTranslatorMask : 0
+0x0dc NoArbiterMask : 0
+0x0de QueryArbiterMask : 0
+0x0e0 OverUsed1 : __unnamed
+0x0e4 OverUsed2 : __unnamed
+0x0e8 BootResources : (null)
+0x0ec CapabilityFlags : 0x180
+0x0f0 DockInfo : __unnamed
+0x100 DisableableDepends : 1
+0x104 PendedSetInterfaceState : _LIST_ENTRY [ 0x8998699c - 0x8998699c ]
+0x10c LegacyBusListEntry : _LIST_ENTRY [ 0x899869a4 - 0x899869a4 ]
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_PNP_DEVNODE_STATE (*)[20])0x899868b8))
(*((ntkrnlmp!_PNP_DEVNODE_STATE (*)[20])0x899868b8)) [Type: _PNP_DEVNODE_STATE [20]]
[0] : DeviceNodeUninitialized (769) [Type: _PNP_DEVNODE_STATE]
[1] : DeviceNodeInitialized (770) [Type: _PNP_DEVNODE_STATE]
[2] : DeviceNodeStartPostWork (775) [Type: _PNP_DEVNODE_STATE]

[3] : 0 [Type: _PNP_DEVNODE_STATE]
[4] : 0 [Type: _PNP_DEVNODE_STATE]

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

面向企业的AI基础设施:TensorFlow镜像部署指南

面向企业的AI基础设施:TensorFlow镜像部署实践 在金融风控模型频繁迭代、智能制造质检系统实时响应、医疗影像分析服务高可用保障的今天,企业对AI系统的稳定性与交付效率提出了前所未有的要求。一个常见的场景是:数据科学家在本地训练出准确率…

作者头像 李华
网站建设 2026/4/23 10:48:22

Python实现Word文档的自动化排版

文章目录一、核心工具准备二、Word自动化排版完整流程(实战案例)步骤1:加载Word文档并初始化基础设置步骤2:字符样式自动化排版(字体、字号、颜色)步骤3:段落格式自动化排版(间距、缩…

作者头像 李华
网站建设 2026/4/22 23:00:18

质谱Open-AutoGLM应用案例全公开,90%的用户不知道的隐藏功能

第一章:质谱Open-AutoGLM核心架构解析系统设计理念 质谱Open-AutoGLM是一个面向质谱数据分析的自动化大语言模型集成框架,其设计核心在于将质谱数据解析、特征提取与自然语言推理能力深度融合。系统采用模块化分层架构,支持多源质谱仪器数据接…

作者头像 李华
网站建设 2026/4/23 11:50:21

创客匠人观察:智能体驱动创始人 IP 知识变现的认知革命

一、行业困局:创始人 IP 知识变现的认知天花板2025 年我国知识付费行业市场规模预计将达 2808.8 亿元,用户规模突破 6.4 亿人,这片看似繁荣的蓝海背后,却隐藏着创始人 IP 的普遍困境。创客匠人平台基于 3000 创始人 IP 服务案例发…

作者头像 李华
网站建设 2026/4/23 11:50:16

大公司都在用的AI框架:TensorFlow镜像背后的工程哲学

大公司都在用的AI框架:TensorFlow镜像背后的工程哲学 在一家大型电商平台的技术团队晨会上,工程师抱怨:“又卡在 pip install tensorflow 了,半小时还没装完。” 这不是个例。全球范围内,无数开发者曾因无法稳定下载 T…

作者头像 李华