news 2026/6/10 11:08:10

nt!PiProcessReenumeration函数中的PiMarkDeviceTreeForReenumeration

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!PiProcessReenumeration函数中的PiMarkDeviceTreeForReenumeration

nt!PiProcessReenumeration函数中的PiMarkDeviceTreeForReenumeration

1: kd> kc
#
00 nt!PiProcessReenumeration
01 nt!PipDeviceActionWorker
02 nt!PipRequestDeviceAction
03 nt!IopInitializePlugPlayServices
04 nt!IoInitSystem
05 nt!Phase1Initialization
06 nt!PspSystemThreadStartup
07 nt!KiThreadStartup
1: kd> dv
Request = 0x89dc7b78
addContext = struct _ADD_CONTEXT
1: kd> dx -id 0,0,ffffffff89dd5240 -r1 ((ntkrnlmp!_PI_DEVICE_REQUEST *)0x89dc7b78)
((ntkrnlmp!_PI_DEVICE_REQUEST *)0x89dc7b78) : 0x89dc7b78 [Type: _PI_DEVICE_REQUEST *]
[+0x000] ListEntry [Type: _LIST_ENTRY]
[+0x008] DeviceObject : 0x89db9c00 : Device for "\Driver\PnpManager" [Type: _DEVICE_OBJECT *]
[+0x00c] RequestType : ReenumerateRootDevices (8) [Type: _DEVICE_REQUEST_TYPE]
[+0x010] ReorderingBarrier : 0x0 [Type: unsigned char]
[+0x014] RequestArgument : 0x0 [Type: unsigned long]
[+0x018] CompletionEvent : 0x0 [Type: _KEVENT *]
[+0x01c] CompletionStatus : 0x0 [Type: long *]


NTSTATUS
PiProcessReenumeration(
IN PPI_DEVICE_REQUEST Request
)
{

enumType = (Request->RequestType == ReenumerateDeviceOnly)? EnumTypeShallow : EnumTypeDeep;
PiMarkDeviceTreeForReenumeration(
deviceNode,
enumType != EnumTypeShallow ? TRUE : FALSE);

addContext.DriverStartType = SERVICE_DEMAND_START;

PipProcessDevNodeTree(
deviceNode,
PnPBootDriversInitialized, // LoadDriver
FALSE, // ReallocateResources
enumType,
TRUE, // Synchronous
FALSE,
&addContext,
Request);

return STATUS_SUCCESS;
}


1: kd> p
eax=00000308 ebx=00000002 ecx=00000000 edx=00000000 esi=89dc7b78 edi=89db9ac0
eip=80c954b9 esp=f789a5b0 ebp=f789a5c0 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
nt!PiProcessReenumeration+0x81:
80c954b9 83fb01 cmp ebx,1
1: kd> p
PiMarkDeviceTreeForReenumerationWorker: Reenumerating HTREE\ROOT\0
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\ACPI_HAL\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_AFD\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_BEEP\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_CRCDISK\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_DMBOOT\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_DMLOAD\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_FIPS\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_GPC\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_IPSEC\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_KSECDD\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_MNMDD\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_MOUNTMGR\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_NDIS\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_NDISTAPI\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_NDISUIO\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_NDPROXY\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_NETBT\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_NULL\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_PARTMGR\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_RASACD\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_RDPCDD\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_RDPWD\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_TCPIP\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_TDTCP\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_VGASAVE\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_VOLSNAP\0000
PiMarkDeviceTreeForReenumerationWorker: Reenumerating Root\LEGACY_WANARP\0000
eax=00000000 ebx=00000002 ecx=00000000 edx=00000000 esi=89dc7b78 edi=89db9ac0
eip=80c954c6 esp=f789a5b0 ebp=f789a5c0 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!PiProcessReenumeration+0x8e:
80c954c6 56 push esi

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

Ao:重新定义你的Microsoft To-Do桌面体验

Ao:重新定义你的Microsoft To-Do桌面体验 【免费下载链接】ao Elegant Microsoft To-Do desktop app 项目地址: https://gitcode.com/gh_mirrors/ao/ao 在快节奏的现代生活中,高效的任务管理已成为提升生产力的关键。Ao作为一款优雅的Microsoft T…

作者头像 李华
网站建设 2026/6/9 20:05:40

突破性进展:SVDQuant量化技术让AI图像生成走进千家万户

突破性进展:SVDQuant量化技术让AI图像生成走进千家万户 【免费下载链接】nunchaku-flux.1-krea-dev 项目地址: https://ai.gitcode.com/hf_mirrors/nunchaku-tech/nunchaku-flux.1-krea-dev 你是否曾经梦想过拥有一台能够创作精美艺术作品的AI助手&#xff…

作者头像 李华
网站建设 2026/6/9 19:19:23

Python音乐下载神器:Musicdl多平台无损音乐抓取完全指南

Python音乐下载神器:Musicdl多平台无损音乐抓取完全指南 【免费下载链接】musicdl Musicdl: A lightweight music downloader written in pure python. 项目地址: https://gitcode.com/gh_mirrors/mu/musicdl 在数字音乐时代,你是否曾因版权限制而…

作者头像 李华
网站建设 2026/6/9 18:37:43

CANFD协议操作指南:数据链路层位填充与冲突处理详解

CANFD通信实战:位填充与仲裁机制的底层逻辑与工程实践在智能汽车和工业控制领域,我们常常会遇到这样一个问题:多个ECU同时要发消息,总线“堵车”了怎么办?或者,在高速传输数据时,接收端时钟一不…

作者头像 李华
网站建设 2026/6/8 3:48:44

libplctag终极指南:免费开源的工业自动化通信解决方案

libplctag终极指南:免费开源的工业自动化通信解决方案 【免费下载链接】libplctag This C library provides a portable and simple API for accessing Allen-Bradley and Modbus PLC data over Ethernet. 项目地址: https://gitcode.com/gh_mirrors/li/libplcta…

作者头像 李华