news 2026/6/14 18:32:09

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/13 0:46:43

Java 中的 String 类为何被设计成不可变(Immutable)

一、先搞懂:什么是 String 的不可变?String 的不可变指的是:一旦一个 String 对象被创建,它内部的字符序列(底层是char[] value数组,Java 9 后改为byte[])就无法被修改。看似修改 String 的操作…

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

赛脉笛借助订单日记实现降本增效双突破

一、客户背景 赛脉笛生物医学(苏州)有限公司,成立于2019年,位于江苏省苏州市张家港市,是一家以从事生产、销售智能设备、自动化设备、医疗器械等产品为主的企业。 在业务不断壮大的过程中,面临生产效率低、…

作者头像 李华
网站建设 2026/5/14 3:13:49

PaperRed 文献黑科技:百篇文献一键梳理,文献综述高效生成

文献综述向来是学术写作中最耗时、最让人头疼的环节。研究者平均需要阅读 50-100 篇相关文献,才能搭建起扎实的综述基础。这个过程往往要消耗论文写作近三分之一的时间。更让人焦虑的是,在海量信息的洪流里,很容易陷入 “读了很多&#xff0c…

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

导师严选9个降AI率网站,千笔AI帮你彻底降AIGC

AI降重工具:让论文更“自然”,让查重更“轻松” 在当前学术写作中,AI生成内容的普及让许多学生面临一个共同难题——如何有效降低AIGC率,同时保持论文的语义通顺和逻辑严谨。对于专科生而言,论文不仅是学业的重要组成部…

作者头像 李华