news 2026/6/11 7:40:39

nt!PiProcessNewDeviceNode函数中的PpQueryDeviceDescription和PpQueryDeviceLocationInformation

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!PiProcessNewDeviceNode函数中的PpQueryDeviceDescription和PpQueryDeviceLocationInformation

nt!PiProcessNewDeviceNode函数中的PpQueryDeviceDescription和PpQueryDeviceLocationInformation


#define PpQueryDeviceDescription(dn, desc) PpIrpQueryDeviceText((dn)->PhysicalDeviceObject, DeviceTextDescription, PsDefaultSystemLocaleId, desc)
#define PpQueryDeviceLocationInformation(dn, loc) PpIrpQueryDeviceText((dn)->PhysicalDeviceObject, DeviceTextLocationInformation, PsDefaultSystemLocaleId, loc)

NTSTATUS
PpIrpQueryDeviceText(
IN PDEVICE_OBJECT DeviceObject,
IN DEVICE_TEXT_TYPE DeviceTextType,
IN LCID POINTER_ALIGNMENT LocaleId,
OUT PWCHAR *DeviceText
)
{
IO_STACK_LOCATION irpSp;
NTSTATUS status;

PAGED_CODE();

ASSERT(DeviceTextType == DeviceTextDescription || DeviceTextType == DeviceTextLocationInformation);

*DeviceText = NULL;

RtlZeroMemory(&irpSp, sizeof(IO_STACK_LOCATION));

irpSp.MajorFunction = IRP_MJ_PNP;
irpSp.MinorFunction = IRP_MN_QUERY_DEVICE_TEXT;

irpSp.Parameters.QueryDeviceText.DeviceTextType = DeviceTextType;
irpSp.Parameters.QueryDeviceText.LocaleId = LocaleId;

status = IopSynchronousCall(DeviceObject, &irpSp, (PULONG_PTR)DeviceText);

ASSERT(NT_SUCCESS(status) || (*DeviceText == NULL));

if (NT_SUCCESS(status)) {

if(*DeviceText == NULL) {

status = STATUS_NOT_SUPPORTED;
}
} else {

*DeviceText = NULL;
}

return status;
}


NTSTATUS
PiProcessNewDeviceNode(
IN PDEVICE_NODE DeviceNode
)
{


PpQueryDeviceDescription(DeviceNode, &description);

0: kd> kc
#
00 nt!PpIrpQueryDeviceText
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


irpSp.MajorFunction = IRP_MJ_PNP;
irpSp.MinorFunction = IRP_MN_QUERY_DEVICE_TEXT;


0: kd> kc
#
00 ACPI!ACPIDispatchIrp
01 nt!IofCallDriver
02 nt!IopSynchronousCall
03 nt!PpIrpQueryDeviceText
04 nt!PiProcessNewDeviceNode
05 nt!PipProcessDevNodeTree
06 nt!PipDeviceActionWorker
07 nt!PipRequestDeviceAction
08 nt!IopInitializeBootDrivers
09 nt!IoInitSystem
0a nt!Phase1Initialization
0b nt!PspSystemThreadStartup
0c nt!KiThreadStartup
0: kd> dv
DeviceObject = 0x899050e8 Device for "\Driver\ACPI"
Irp = 0x89905220
0: kd> g
Breakpoint 5 hit
eax=00000002 ebx=8990520c ecx=899c0e74 edx=f745b068 esi=f73fe214 edi=00000000
eip=f740410c esp=f789a20c ebp=f789a238 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
ACPI!ACPIDispatchIrp+0x19c:
f740410c ffd6 call esi {ACPI!ACPIBusIrpUnhandled (f73fe214)}
0: kd> t
eax=00000002 ebx=8990520c ecx=899c0e74 edx=f745b068 esi=f73fe214 edi=00000000
eip=f73fe214 esp=f789a208 ebp=f789a238 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
ACPI!ACPIBusIrpUnhandled:
f73fe214 55 push ebp
0: kd> kc
#
00 ACPI!ACPIBusIrpUnhandled
01 ACPI!ACPIDispatchIrp
02 nt!IofCallDriver
03 nt!IopSynchronousCall
04 nt!PpIrpQueryDeviceText
05 nt!PiProcessNewDeviceNode
06 nt!PipProcessDevNodeTree
07 nt!PipDeviceActionWorker
08 nt!PipRequestDeviceAction
09 nt!IopInitializeBootDrivers
0a nt!IoInitSystem
0b nt!Phase1Initialization
0c nt!PspSystemThreadStartup
0d nt!KiThreadStartup

0: kd> gu
eax=c00000bb ebx=8990520c ecx=80ae0dfa edx=80b18958 esi=f73fe214 edi=00000000
eip=f740410e esp=f789a214 ebp=f789a238 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
ACPI!ACPIDispatchIrp+0x19e:
f740410e ff75fc push dword ptr [ebp-4] ss:0010:f789a234=899c0d58

eax=c00000bb

0: kd> gu
eax=c00000bb ebx=899050e8 ecx=899c0e74 edx=80b18958 esi=f789a2c8 edi=899052b4
eip=80c95e00 esp=f789a25c ebp=f789a284 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!IopSynchronousCall+0x1aa:
80c95e00 8bf0 mov esi,eax
0: kd> gu
eax=c00000bb ebx=00000000 ecx=00000000 edx=80b18958 esi=f789a370 edi=f789a2c8
eip=80c976c5 esp=f789a298 ebp=f789a2c8 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!PpIrpQueryDeviceText+0x8d:
80c976c5 8bd8 mov ebx,eax
0: kd> gu
eax=c00000bb ebx=00000000 ecx=00000000 edx=80b18958 esi=894ffea8 edi=899050e8
eip=80c93967 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+0xe5:
80c93967 8d45e0 lea eax,[ebp-20h]
0: kd> dv description
description = 0x00000000


PpQueryDeviceLocationInformation(DeviceNode, &location);

irpSp.MajorFunction = IRP_MJ_PNP;
irpSp.MinorFunction = IRP_MN_QUERY_DEVICE_TEXT;

0: kd> t
eax=f789a36c ebx=00000000 ecx=00000000 edx=80b18958 esi=894ffea8 edi=899050e8
eip=80c97638 esp=f789a2cc 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!PpIrpQueryDeviceText:
80c97638 55 push ebp
0: kd> g
Breakpoint 74 hit
eax=0000001b ebx=00000000 ecx=89981f38 edx=89905220 esi=89905220 edi=899050e8
eip=f7403f70 esp=f789a23c ebp=f789a254 iopl=0 nv up ei ng nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000286
ACPI!ACPIDispatchIrp:
f7403f70 55 push ebp
0: kd> g
Breakpoint 5 hit
eax=00000002 ebx=8990520c ecx=899c0e74 edx=f745b068 esi=f73fe214 edi=00000000
eip=f740410c esp=f789a20c ebp=f789a238 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
ACPI!ACPIDispatchIrp+0x19c:
f740410c ffd6 call esi {ACPI!ACPIBusIrpUnhandled (f73fe214)}
0: kd> gu
eax=c00000bb ebx=00000000 ecx=899c0e74 edx=80b18958 esi=89905220 edi=899050e8
eip=80a2675c esp=f789a248 ebp=f789a254 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!IofCallDriver+0x62:
80a2675c 5f pop edi
0: kd> gu
eax=c00000bb ebx=899050e8 ecx=899c0e74 edx=80b18958 esi=f789a2c8 edi=899052b4
eip=80c95e00 esp=f789a25c ebp=f789a284 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!IopSynchronousCall+0x1aa:
80c95e00 8bf0 mov esi,eax
0: kd> gu
eax=c00000bb ebx=00000001 ecx=00000000 edx=80b18958 esi=f789a36c edi=f789a2c8
eip=80c976c5 esp=f789a298 ebp=f789a2c8 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!PpIrpQueryDeviceText+0x8d:
80c976c5 8bd8 mov ebx,eax
0: kd> gu
eax=c00000bb ebx=00000000 ecx=00000000 edx=80b18958 esi=894ffea8 edi=899050e8
eip=80c9397e 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+0xfc:
80c9397e 8d45d4 lea eax,[ebp-2Ch]

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

PHP毕设选题推荐:基于php+vue的篮球馆智慧管理系统场地信息管理、预约【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/12 6:42:24

6.2 Bookinfo在Kubernetes中的部署:完整YAML配置实战

6.2 Bookinfo在Kubernetes中的部署:完整YAML配置实战 引言 部署Bookinfo是学习Istio的第一步。本文将详细介绍Bookinfo在Kubernetes中的完整部署过程,包括所有必要的YAML配置。 一、部署准备 1.1 前置条件 Kubernetes集群 Istio已安装 kubectl配置 1.2 启用自动注入 kub…

作者头像 李华
网站建设 2026/6/12 2:33:18

拖延症福音 一键生成论文工具 千笔·专业论文写作工具 VS 灵感ai

随着人工智能技术的迅猛迭代与普及,AI辅助写作工具已逐步渗透到高校学术写作场景中,成为专科生、本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生,开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时…

作者头像 李华
网站建设 2026/6/11 23:32:46

【计算机毕业设计案例】基于php+vue的篮球馆篮球明星周边商品销售智慧管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/10 22:13:42

基于Spark的热门旅游景点数据分析系统的设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码_django+spider

基于Spark的热门旅游景点数据分析系统的设计(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码_djangospider python3.8djangosparkspidermysql5.7vue 管理员进入主页面,主要功能包括对个人中心、门票信息管理、名宿信…

作者头像 李华
网站建设 2026/6/4 13:11:34

揭秘Java面试中XML考点!这些地方你必须知道!

文章目录揭秘Java面试中XML考点!这些地方你必须知道!为什么面试官喜欢考XML?一、XML的基本概念什么是XML?XML的特点XML的常用场景二、Java中常用的XML解析方式1. DOM(文档对象模型)核心接口示例代码优点与缺…

作者头像 李华