nt!PiProcessNewDeviceNode对节点PCI0的处理nt!PpQueryDeviceID
2026/4/16 10:17:55 网站建设 项目流程

nt!PiProcessNewDeviceNode对节点PCI0的处理nt!PpQueryDeviceID

0: kd> kc
#
00 nt!PiProcessNewDeviceNode
01 nt!PipProcessDevNodeTree
02 nt!PipDeviceActionWorker
03 nt!PipRequestDeviceAction
04 nt!IopInitializeBootDrivers
05 nt!IoInitSystem
06 nt!Phase1Initialization
07 nt!PspSystemThreadStartup
08 nt!KiThreadStartup
0: kd> dv
DeviceNode = 0x894ffea8


Device (PCI0)
{
Name (_HID, EisaId ("PNP0A03")) // _HID: Hardware ID
Name (_CID, EisaId ("PNP0A08")) // _CID: Compatible ID
Name (_BBN, 0x00) // _BBN: BIOS Bus Number
Name (_ADR, 0x00) // _ADR: Address


系统提供的设备设置类 ClassGUID
系统 {4D36E97D-E325-11CE-BFC1-08002BE10318}
计算机 {4D36E966-E325-11CE-BFC1-08002BE10318}
处理器 {50127DC3-0F36-415E-A6CC-4CB3BE910B65}
PCMCIA: {4D36E977-E325-11CE-BFC1-08002BE10318}
HDC {4D36E96A-E325-11CE-BFC1-08002BE10318}
SCSI适配器 {4D36E97B-E325-11CE-BFC1-08002BE10318}
磁盘驱动器 {4D36E967-E325-11CE-BFC1-08002BE10318}
CDROM {4D36E965-E325-11CE-BFC1-08002BE10318}
FDC {4D36E969-E325-11CE-BFC1-08002BE10318}
软盘驱动器 {4D36E980-E325-11CE-BFC1-08002BE10318}
卷 {71A27CDD-812A-11D0-BEC7-08002BE2092F}
USB {36FC9E60-C465-11CF-8056-444553540000}
SBP2 {D48179BE-EC20-11D1-B6B8-00C04FA372A7}
1394 {6BDD1FC1-810F-11D0-BEC7-08002BE2092F}
Enum1394 {C459DF55-DB08-11D1-B009-00A0C9081FF6}
键盘 {4D36E96B-E325-11CE-BFC1-08002BE10318}
鼠标 {4D36E96F-E325-11CE-BFC1-08002BE10318}
HIDClass {745A17A0-74D3-11D0-B6FE-00A0C90F57DA}
端口 {4D36E978-E325-11CE-BFC1-08002BE10318}

status = PpQueryDeviceID(DeviceNode, &busID, &deviceID);

0: kd> kc
#
00 nt!PpQueryDeviceID
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 = 0xf789a358
DeviceID = 0xf789a354

0: kd> bp acpi!acpiget
breakpoint 71 redefined
0: kd> bp acpi!runcontext
breakpoint 39 redefined
0: kd> bp acpi!restartcontext
breakpoint 42 redefined
0: kd> bp acpi!PpIrpQueryCapabilities


typedef enum {
BusQueryDeviceID = 0, // <Enumerator>\<Enumerator-specific device id>
BusQueryHardwareIDs = 1, // Hardware ids
BusQueryCompatibleIDs = 2, // compatible device ids
BusQueryInstanceID = 3, // persistent id for this instance of the device
BusQueryDeviceSerialNumber = 4 // serial number for this device
} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;


status = PpQueryID(DeviceNode, BusQueryDeviceID, &id, &idLength);

0: kd> kc
#
00 nt!PpQueryID
01 nt!PpQueryDeviceID
02 nt!PiProcessNewDeviceNode
03 nt!PipProcessDevNodeTree
04 nt!PipDeviceActionWorker
05 nt!PipRequestDeviceAction
06 nt!IopInitializeBootDrivers
07 nt!IoInitSystem
08 nt!Phase1Initialization
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
0: kd> dv
DeviceNode = 0x894ffea8
IDType = BusQueryDeviceID (0n0)

status = PpIrpQueryID(DeviceNode->PhysicalDeviceObject, IDType, ID);

0: kd> kc
#
00 nt!PpIrpQueryID
01 nt!PpQueryID
02 nt!PpQueryDeviceID
03 nt!PiProcessNewDeviceNode
04 nt!PipProcessDevNodeTree
05 nt!PipDeviceActionWorker
06 nt!PipRequestDeviceAction
07 nt!IopInitializeBootDrivers
08 nt!IoInitSystem
09 nt!Phase1Initialization
0a nt!PspSystemThreadStartup
0b nt!KiThreadStartup
0: kd> dv
DeviceObject = 0x899050e8 Device for "\Driver\ACPI"
IDType = BusQueryDeviceID (0n0)


ASSERT(IDType == BusQueryDeviceID || IDType == BusQueryInstanceID ||
IDType == BusQueryHardwareIDs || IDType == BusQueryCompatibleIDs ||
IDType == BusQueryDeviceSerialNumber);

BusQueryDeviceID PNP0A03
BusQueryHardwareIDs

irpSp.MajorFunction = IRP_MJ_PNP;
irpSp.MinorFunction = IRP_MN_QUERY_ID;

irpSp.Parameters.QueryId.IdType = IDType;

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


0: kd> kc
#
00 nt!IopSynchronousCall
01 nt!PpIrpQueryID
02 nt!PpQueryID
03 nt!PpQueryDeviceID
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"
TopStackLocation = 0xf789a258 IRP_MJ_PNP / IRP_MN_QUERY_ID for {...}
Information = 0xf789a2c8


0: kd> kc
#
00 nt!IofCallDriver
01 nt!IopSynchronousCall
02 nt!PpIrpQueryID
03 nt!PpQueryID
04 nt!PpQueryDeviceID
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> p
eax=0000001b ebx=00000000 ecx=89981f38 edx=89905220 esi=89905220 edi=899050e8
eip=80a26758 esp=f789a1f4 ebp=f789a208 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!IofCallDriver+0x5e:
80a26758 ff548138 call dword ptr [ecx+eax*4+38h] ds:0023:89981fdc={ACPI!ACPIDispatchIrp (f7403f70)}

0: kd> dt _driver_object 89981f38
hal!_DRIVER_OBJECT
+0x000 Type : 0n4
+0x002 Size : 0n168
+0x004 DeviceObject : 0x8952a9e8 _DEVICE_OBJECT
+0x008 Flags : 0x12
+0x00c DriverStart : 0xf73f9000 Void
+0x010 DriverSize : 0x6d000
+0x014 DriverSection : 0x899c8008 Void
+0x018 DriverExtension : 0x89981fe0 _DRIVER_EXTENSION
+0x01c DriverName : _UNICODE_STRING "\Driver\ACPI"
+0x024 HardwareDatabase : 0x80e3c260 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
+0x028 FastIoDispatch : 0xf743b8c0 _FAST_IO_DISPATCH
+0x02c DriverInit : 0xf745c42f long ACPI!GsDriverEntry+0
+0x030 DriverStartIo : (null)
+0x034 DriverUnload : 0xf74036ae void ACPI!ACPIUnload+0
+0x038 MajorFunction : [28] 0xf7403f70 long ACPI!ACPIDispatchIrp+0
0: kd> dx -id 0,0,899a2278 -r1 (*((halmacpi!long (*(*)[28])(_DEVICE_OBJECT *,_IRP *))0x89981f70))
(*((halmacpi!long (*(*)[28])(_DEVICE_OBJECT *,_IRP *))0x89981f70)) [Type: long (* [28])(_DEVICE_OBJECT *,_IRP *)]
[0] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[1] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[2] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[3] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[4] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[5] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[6] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[7] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[8] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[9] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[10] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[11] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[12] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[13] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[14] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[15] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[16] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[17] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[18] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[19] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[20] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[21] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[22] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[23] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[24] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[25] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[26] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[27] : 0xf7403f70 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
0: kd> dd 0x89981f70+1b*4
89981fdc f7403f70 89981f38 f7403bd2 00000000
89981fec 000a0008 899c5e08 00000000 00000000
89981ffc 00000000 0a2d0000 44706341 00000008
8998200c 00402000 5f534750 00000000 00000000
8998201c 00000000 00000000 00000000 00000000
8998202c 00000000 00000000 00000000 00000000
8998203c 00000000 00000000 00000000 00000000
8998204c 00000000 00000000 00000000 00000000
0: kd> u f7403f70
ACPI!ACPIDispatchIrp [d:\srv03rtm\base\busdrv\acpi\driver\nt\dispatch.c @ 575]:
f7403f70 55 push ebp
f7403f71 8bec mov ebp,esp
f7403f73 83ec18 sub esp,18h
f7403f76 53 push ebx
f7403f77 8b5d0c mov ebx,dword ptr [ebp+0Ch]
f7403f7a 56 push esi
f7403f7b 8b7360 mov esi,dword ptr [ebx+60h]
f7403f7e 57 push edi


0: kd> bp ACPI!ACPIDispatchIrp
breakpoint 81 redefined

0: kd> kc
#
00 ACPI!ACPIDispatchIrp
01 nt!IofCallDriver
02 nt!IopSynchronousCall
03 nt!PpIrpQueryID
04 nt!PpQueryID
05 nt!PpQueryDeviceID
06 nt!PiProcessNewDeviceNode
07 nt!PipProcessDevNodeTree
08 nt!PipDeviceActionWorker
09 nt!PipRequestDeviceAction
0a nt!IopInitializeBootDrivers
0b nt!IoInitSystem
0c nt!Phase1Initialization
0d nt!PspSystemThreadStartup
0e nt!KiThreadStartup
0: kd> dv
DeviceObject = 0x899050e8 Device for "\Driver\ACPI"
Irp = 0x89905220
removeEvent = struct _KEVENT

status = ACPIInternalGetDispatchTable(
DeviceObject,
&deviceExtension,
&dispatchTable
);

0: kd> dt acpi!_Device_Extension 0x899c0d58
+0x000 Flags : 0x00402000`02010020
+0x000 UFlags : __unnamed
+0x008 Signature : 0x5f534750
+0x00c DebugFlags : 0
+0x010 DispatchTable : 0xf743830c IRP_DISPATCH_TABLE

+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> dx -id 0,0,899a2278 -r1 ((ACPI!IRP_DISPATCH_TABLE *)0xf743830c)
((ACPI!IRP_DISPATCH_TABLE *)0xf743830c) : 0xf743830c [Type: IRP_DISPATCH_TABLE *]
[+0x000] CreateClose : 0xf7403530 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[+0x004] DeviceControl : 0xf7429a84 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[+0x008] PnpStartDevice : 0xf743f2b0 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[+0x00c] Pnp : 0xf745b068 [Type: long (**)(_DEVICE_OBJECT *,_IRP *)]
[+0x010] Power : 0xf7438118 [Type: long (**)(_DEVICE_OBJECT *,_IRP *)]
[+0x014] SystemControl : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[+0x018] Other : 0xf7403530 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[+0x01c] Worker : 0x0 [Type: void (*)(_DEVICE_EXTENSION *,unsigned long)]

0: kd> x ACPI!ACPIDispatchPdoPnpTable
f745b068 ACPI!ACPIDispatchPdoPnpTable = <function> *[25]
0: kd> dx -r1 (*((ACPI!long (*(*)[25])(_DEVICE_OBJECT *,_IRP *))0xf745b068))
(*((ACPI!long (*(*)[25])(_DEVICE_OBJECT *,_IRP *))0xf745b068)) [Type: long (* [25])(_DEVICE_OBJECT *,_IRP *)]
[0] : 0x0 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[1] : 0xf743de12 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[2] : 0xf73fdfc6 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[3] : 0xf743d332 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[4] : 0xf743ec84 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[5] : 0xf743de12 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[6] : 0xf743d332 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[7] : 0xf743ee9a [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[8] : 0xf743f02c [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[9] : 0xf743d954 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[10] : 0xf743dfee [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[11] : 0xf743e51c [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[12] : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[13] : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[14] : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[15] : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[16] : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[17] : 0xf743d582 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[18] : 0xf743ea8e [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[19] : 0xf743db1a [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[20] : 0xf743dd44 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[21] : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[22] : 0xf743d450 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[23] : 0xf73fe132 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
[24] : 0xf73fe214 [Type: long (*)(_DEVICE_OBJECT *,_IRP *)]
0: kd> dds 0xf745b068
f745b068 00000000
f745b06c f743de12 ACPI!ACPIBusIrpQueryRemoveOrStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 2074]
f745b070 f73fdfc6 ACPI!ACPIBusIrpRemoveDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 2849]
f745b074 f743d332 ACPI!ACPIBusIrpCancelRemoveOrStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 901]
f745b078 f743ec84 ACPI!ACPIBusIrpStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3615]
f745b07c f743de12 ACPI!ACPIBusIrpQueryRemoveOrStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 2074]
f745b080 f743d332 ACPI!ACPIBusIrpCancelRemoveOrStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 901]
f745b084 f743ee9a ACPI!ACPIBusIrpQueryDeviceRelations [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1348]
f745b088 f743f02c ACPI!ACPIBusIrpQueryInterface [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1701]
f745b08c f743d954 ACPI!ACPIBusIrpQueryCapabilities [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1311]
f745b090 f743dfee ACPI!ACPIBusIrpQueryResources [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 2149]
f745b094 f743e51c ACPI!ACPIBusIrpQueryResourceRequirements [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 2431]
f745b098 f73fe214 ACPI!ACPIBusIrpUnhandled [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3825]
f745b09c f73fe214 ACPI!ACPIBusIrpUnhandled [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3825]
f745b0a0 f73fe214 ACPI!ACPIBusIrpUnhandled [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3825]
f745b0a4 f73fe214 ACPI!ACPIBusIrpUnhandled [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3825]
f745b0a8 f73fe214 ACPI!ACPIBusIrpUnhandled [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3825]
f745b0ac f743d582 ACPI!ACPIBusIrpEject [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1087]
f745b0b0 f743ea8e ACPI!ACPIBusIrpSetLock [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 2984]
f745b0b4 f743db1a ACPI!ACPIBusIrpQueryId [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1484]
f745b0b8 f743dd44 ACPI!ACPIBusIrpQueryPnpDeviceState [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1930]
f745b0bc f73fe214 ACPI!ACPIBusIrpUnhandled [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3825]
f745b0c0 f743d450 ACPI!ACPIBusIrpDeviceUsageNotification [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 975]
f745b0c4 f73fe132 ACPI!ACPIBusIrpSurpriseRemoval [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3704]
f745b0c8 f73fe214 ACPI!ACPIBusIrpUnhandled [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 3825]
f745b0cc 00000000
f745b0d0 00000000
f745b0d4 f744f1f4 ACPI!ACPIRootIrpQueryRemoveOrStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\root.c @ 923]
f745b0d8 f7404a0e ACPI!ACPIFilterIrpRemoveDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\filter.c @ 949]
f745b0dc f744e76c ACPI!ACPIRootIrpCancelRemoveOrStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\root.c @ 63]
f745b0e0 f744170e ACPI!ACPIFilterIrpStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\filter.c @ 1732]
f745b0e4 f744f1f4 ACPI!ACPIRootIrpQueryRemoveOrStopDevice [d:\srv03rtm\base\busdrv\acpi\driver\nt\root.c @ 923]


} else if (minorFunction < (ACPIDispatchPnpTableSize-1)) {

//
// Dispatch based on minor function. Not that we don't store
// IRP_MN_START_DEVICE (0x0) in this table, so we have to
// sub one from the minor code
//
dispatch = dispatchTable->Pnp[minorFunction];

ACPI!ACPIBusIrpQueryId

//
// Dispatch to handler, then remove our reference
//
status = dispatch (DeviceObject, Irp);

0: kd> kc
#
00 ACPI!ACPIBusIrpQueryId
01 ACPI!ACPIDispatchIrp
02 nt!IofCallDriver
03 nt!IopSynchronousCall
04 nt!PpIrpQueryID
05 nt!PpQueryID
06 nt!PpQueryDeviceID
07 nt!PiProcessNewDeviceNode
08 nt!PipProcessDevNodeTree
09 nt!PipDeviceActionWorker
0a nt!PipRequestDeviceAction
0b nt!IopInitializeBootDrivers
0c nt!IoInitSystem
0d nt!Phase1Initialization
0e nt!PspSystemThreadStartup
0f nt!KiThreadStartup
0: kd> dv
DeviceObject = 0x899050e8 Device for "\Driver\ACPI"
Irp = 0x89905220


case BusQueryDeviceID:

//
// Get the Device ID as a wide string
//
status = ACPIGetDeviceIDSyncWide(
deviceExtension,
&baseBuffer,
&baseBufferSize
);
if (status == STATUS_OBJECT_NAME_NOT_FOUND) {

status = STATUS_NOT_SUPPORTED;
break;

} else if (!NT_SUCCESS(status)) {

ACPIDevPrint( (
ACPI_PRINT_FAILURE,
deviceExtension,
" (0x%08lx): IRP_MN_QUERY_ID( %d - HID) = 0x%08lx\n",
Irp,
type,
status
) );
break;

}

//
// Store the result in the Irp
//
Irp->IoStatus.Information = (ULONG_PTR) baseBuffer;
break;

//
// This is used to get the device ID as a wide string, synchronously
//
#define ACPIGetDeviceIDSyncWide( \
DeviceExtension, \
Buffer, \
BufferSize \
) \
ACPIGetDeviceID( \
DeviceExtension, \
(GET_PROP_SKIP_CALLBACK | \
GET_CONVERT_TO_WIDESTRING), \
NULL, \
NULL, \
Buffer, \
BufferSize \
)

#define ACPIGetDeviceID( \
DeviceExtension, \
Flags, \
CallBack, \
Context, \
Buffer, \
BufferSize \
) \
ACPIGet( \
DeviceExtension, \
PACKED_HID, \ PACKED_HID
(GET_CONVERT_TO_DEVICEID | \ GET_CONVERT_TO_DEVICEID
GET_REQUEST_STRING | \ GET_REQUEST_STRING
GET_TYPE_INTEGER | \
GET_TYPE_STRING | \
Flags ), \
NULL, \
0, \
CallBack, \
Context, \
Buffer, \
(PULONG) BufferSize \
)


0: kd> t
Breakpoint 71 hit
eax=899c0d58 ebx=89905220 ecx=f789a1c4 edx=00000000 esi=c00000bb edi=00000000
eip=f74076b8 esp=f789a178 ebp=f789a1b8 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!ACPIGet:
f74076b8 55 push ebp
0: kd> kc
#
00 ACPI!ACPIGet
01 ACPI!ACPIBusIrpQueryId
02 ACPI!ACPIDispatchIrp
03 nt!IofCallDriver
04 nt!IopSynchronousCall
05 nt!PpIrpQueryID
06 nt!PpQueryID
07 nt!PpQueryDeviceID
08 nt!PiProcessNewDeviceNode
09 nt!PipProcessDevNodeTree
0a nt!PipDeviceActionWorker
0b nt!PipRequestDeviceAction
0c nt!IopInitializeBootDrivers
0d nt!IoInitSystem
0e nt!Phase1Initialization
0f nt!PspSystemThreadStartup
10 nt!KiThreadStartup
0: kd> dv
Target = 0x899c0d58
ObjectID = 0x4449485f
Flags = 0x20080036


//
// Go out and see if the requested object is present
//
acpiObject = ACPIAmliGetNamedChild(
acpiObject,
ObjectID
);

0: kd> gu
eax=899b0024 ebx=f743b938 ecx=4449485f edx=00000000 esi=89968640 edi=89968648
eip=f74078dd esp=f789a138 ebp=f789a174 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!ACPIGet+0x225:
f74078dd 85c0 test eax,eax
0: kd> dt nsobj 899b0024
ACPI!NSOBJ
+0x000 list : _List
+0x008 pnsParent : 0x899affac _NSObj
+0x00c pnsFirstChild : (null)
+0x010 dwNameSeg : 0x4449485f
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : 0x899affac _NSObj
+0x01c ObjData : _ObjData
+0x030 Context : (null)
+0x034 dwRefCount : 0
0: kd> db 899b0024
899b0024 64 a0 91 89 68 00 9b 89-ac ff 9a 89 00 00 00 00 d...h...........
899b0034 5f 48 49 44 30 f3 9a 89-ac ff 9a 89 00 00 01 00 _HID0...........

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.......

0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899b0040))
(*((ACPI!_ObjData *)0x899b0040)) [Type: _ObjData]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x1 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0x30ad041 [Type: unsigned long]
[+0x008] uipDataValue : 0x30ad041 [Type: unsigned long]
[+0x008] pnsAlias : 0x30ad041 [Type: _NSObj *]
[+0x008] pdataAlias : 0x30ad041 [Type: _ObjData *]
[+0x008] powner : 0x30ad041 [Type: void *]
[+0x00c] dwDataLen : 0x0 [Type: unsigned long]
[+0x010] pbDataBuff : 0x0 [Type: unsigned char *]

if (!acpiObject) {

status = STATUS_OBJECT_NAME_NOT_FOUND;
goto ACPIGetExit;

}

0: kd> dv async
async = 0x00 ''

} else {

//
// Evaluate the request
//
status = AMLIEvalNameSpaceObject(
acpiObject,
&(request->ResultData),
argumentCount,
argumentPtr
);

}

0: kd> kc
#
00 ACPI!SyncEvalObject
01 ACPI!AMLIEvalNameSpaceObject
02 ACPI!ACPIGet
03 ACPI!ACPIBusIrpQueryId
04 ACPI!ACPIDispatchIrp
05 nt!IofCallDriver
06 nt!IopSynchronousCall
07 nt!PpIrpQueryID
08 nt!PpQueryID
09 nt!PpQueryDeviceID
0a nt!PiProcessNewDeviceNode
0b nt!PipProcessDevNodeTree
0c nt!PipDeviceActionWorker
0d nt!PipRequestDeviceAction
0e nt!IopInitializeBootDrivers
0f nt!IoInitSystem
10 nt!Phase1Initialization
11 nt!PspSystemThreadStartup
12 nt!KiThreadStartup
0: kd> dv
pns = 0x899b0024
pdataResult = 0x8996866c
icArgs = 0n0
pdataArgs = 0x00000000
seEvalObj = struct _syncevent
0: kd> db 0x899b0024
899b0024 64 a0 91 89 68 00 9b 89-ac ff 9a 89 00 00 00 00 d...h...........
899b0034 5f 48 49 44 30 f3 9a 89-ac ff 9a 89 00 00 01 00 _HID0...........
899b0044 00 00 00 00 41 d0 0a 03-00 00 00 00 00 00 00 00 ....A...........
899b0054 00 00 00 00 00 00 00 00-48 4e 53 4f 44 00 00 00 ........HNSOD...
899b0064 00 f0 9a 89 24 00 9b 89-ac 00 9b 89 ac ff 9a 89 ....$...........
899b0074 00 00 00 00 5f 43 49 44-30 f3 9a 89 24 00 9b 89 ...._CID0...$...
899b0084 00 00 01 00 00 00 00 00-41 d0 0a 08 00 00 00 00 ........A.......
899b0094 00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f ............HNSO
0: kd> dx -r1 (*((ACPI!_syncevent *)0xf789a0e0))
(*((ACPI!_syncevent *)0xf789a0e0)) [Type: _syncevent]
[+0x000] rcCompleted : -1986330588 [Type: long]
[+0x004] pctxt : 0x0 [Type: _ctxt *]
[+0x008] Event [Type: _KEVENT]

0: kd> x acpi!gReadyQueue
f743a928 ACPI!gReadyQueue = struct _ctxtq
0: kd> dx -r1 (*((ACPI!_ctxtq *)0xf743a928))
(*((ACPI!_ctxtq *)0xf743a928)) [Type: _ctxtq]
[+0x000] dwfCtxtQ : 0x0 [Type: unsigned long]
[+0x004] pkthCurrent : 0x0 [Type: _KTHREAD *] 为0。
[+0x008] pctxtCurrent : 0x0 [Type: _ctxt *]
[+0x00c] plistCtxtQ : 0x0 [Type: _List *]
[+0x010] dwmsTimeSliceLength : 0x64 [Type: unsigned long]
[+0x014] dwmsTimeSliceInterval : 0x64 [Type: unsigned long]
[+0x018] pfnPauseCallback : 0x0 [Type: void (__cdecl*)(void *)]
[+0x01c] PauseCBContext : 0x0 [Type: void *]
[+0x020] mutCtxtQ [Type: _mutex]
[+0x028] Timer [Type: _KTIMER]
[+0x050] DpcStartTimeSlice [Type: _KDPC]
[+0x070] DpcExpireTimeSlice [Type: _KDPC]
[+0x090] WorkItem [Type: _WORK_QUEUE_ITEM]

else
{
LOGSCHEDEVENT('SYNC', (ULONG_PTR)KeGetCurrentIrql(), (ULONG_PTR)pns, 0);
rc = AsyncEvalObject(pns, pdataResult, icArgs, pdataArgs,
(PFNACB)EvalMethodComplete, &seEvalObj, FALSE);
}

0: kd> kc
#
00 ACPI!AsyncEvalObject
01 ACPI!SyncEvalObject
02 ACPI!AMLIEvalNameSpaceObject
03 ACPI!ACPIGet
04 ACPI!ACPIBusIrpQueryId
05 ACPI!ACPIDispatchIrp
06 nt!IofCallDriver
07 nt!IopSynchronousCall
08 nt!PpIrpQueryID
09 nt!PpQueryID
0a nt!PpQueryDeviceID
0b nt!PiProcessNewDeviceNode
0c nt!PipProcessDevNodeTree
0d nt!PipDeviceActionWorker
0e nt!PipRequestDeviceAction
0f nt!IopInitializeBootDrivers
10 nt!IoInitSystem
11 nt!Phase1Initialization
12 nt!PspSystemThreadStartup
13 nt!KiThreadStartup
0: kd> dv
pns = 0x899b0024
pdataResult = 0x8996866c

0: kd> kc
#
00 ACPI!RestartContext
01 ACPI!AsyncEvalObject
02 ACPI!SyncEvalObject
03 ACPI!AMLIEvalNameSpaceObject
04 ACPI!ACPIGet
05 ACPI!ACPIBusIrpQueryId
06 ACPI!ACPIDispatchIrp
07 nt!IofCallDriver
08 nt!IopSynchronousCall
09 nt!PpIrpQueryID
0a nt!PpQueryID
0b nt!PpQueryDeviceID
0c nt!PiProcessNewDeviceNode
0d nt!PipProcessDevNodeTree
0e nt!PipDeviceActionWorker
0f nt!PipRequestDeviceAction
10 nt!IopInitializeBootDrivers
11 nt!IoInitSystem
12 nt!Phase1Initialization
13 nt!PspSystemThreadStartup
14 nt!KiThreadStartup
0: kd> dv
pctxt = 0x89568000
fDelayExecute = 0x00 ''

if (KeGetCurrentIrql() < DISPATCH_LEVEL)
{
AcquireMutex(&gReadyQueue.mutCtxtQ);
rc = InsertReadyQueue(pctxt, fDelayExecute);
ReleaseMutex(&gReadyQueue.mutCtxtQ);
}

0: kd> kc
#
00 ACPI!InsertReadyQueue
01 ACPI!RestartContext
02 ACPI!AsyncEvalObject
03 ACPI!SyncEvalObject
04 ACPI!AMLIEvalNameSpaceObject
05 ACPI!ACPIGet
06 ACPI!ACPIBusIrpQueryId
07 ACPI!ACPIDispatchIrp
08 nt!IofCallDriver
09 nt!IopSynchronousCall
0a nt!PpIrpQueryID
0b nt!PpQueryID
0c nt!PpQueryDeviceID
0d nt!PiProcessNewDeviceNode
0e nt!PipProcessDevNodeTree
0f nt!PipDeviceActionWorker
10 nt!PipRequestDeviceAction
11 nt!IopInitializeBootDrivers
12 nt!IoInitSystem
13 nt!Phase1Initialization
14 nt!PspSystemThreadStartup
15 nt!KiThreadStartup
0: kd> dv
pctxt = 0x89568000
fDelayExecute = 0x00 ''

else if ((gReadyQueue.pkthCurrent == NULL) &&
!(gReadyQueue.dwfCtxtQ & CQF_PAUSED))
//
// We only execute the method if we are not in paused state.
//
{
LOGSCHEDEVENT('EVAL', (ULONG_PTR)pctxt, (ULONG_PTR)
(pctxt->pnctxt? pctxt->pnctxt->pnsObj: pctxt->pnsObj),
(ULONG_PTR)pctxt->pbOp);
//
// There is no active context and we can execute it immediately.
//
rc = RunContext(pctxt);

0: kd> kc
#
00 ACPI!RunContext
01 ACPI!InsertReadyQueue
02 ACPI!RestartContext
03 ACPI!AsyncEvalObject
04 ACPI!SyncEvalObject
05 ACPI!AMLIEvalNameSpaceObject
06 ACPI!ACPIGet
07 ACPI!ACPIBusIrpQueryId
08 ACPI!ACPIDispatchIrp
09 nt!IofCallDriver
0a nt!IopSynchronousCall
0b nt!PpIrpQueryID
0c nt!PpQueryID
0d nt!PpQueryDeviceID
0e nt!PiProcessNewDeviceNode
0f nt!PipProcessDevNodeTree
10 nt!PipDeviceActionWorker
11 nt!PipRequestDeviceAction
12 nt!IopInitializeBootDrivers
13 nt!IoInitSystem
14 nt!Phase1Initialization
15 nt!PspSystemThreadStartup
16 nt!KiThreadStartup
0: kd> dv
pctxt = 0x89568000
pctxtSave = 0xf741d711
pkthSave = 0x00000008
rc = 0n-1990819840

else
{
ReleaseMutex(&gReadyQueue.mutCtxtQ);
if ((rc == STATUS_SUCCESS) && (pctxt->pdataCallBack != NULL))
{
rc = DupObjData(gpheapGlobal, pctxt->pdataCallBack, &pctxt->Result);
}

if (pctxt->dwfCtxt & CTXTF_NEED_CALLBACK)
{
AsyncCallBack(pctxt, rc);


0: kd> dt ACPI!_ctxt 0x89568000
+0x000 dwSig : 0x54585443
+0x004 pbCtxtEnd : 0x8956a000 ""
+0x008 listCtxt : _List
+0x010 listQueue : _List
+0x018 pplistCtxtQueue : (null)
+0x01c plistResources : (null)
+0x020 dwfCtxt : 8
+0x024 pnsObj : 0x899b0024 _NSObj
+0x028 pnsScope : 0x899b0024 _NSObj
+0x02c powner : (null)
+0x030 pcall : (null)
+0x034 pnctxt : (null)
+0x038 dwSyncLevel : 0
+0x03c pbOp : (null)
+0x040 Result : _ObjData
+0x054 pfnAsyncCallBack : 0xf741eeb5 void ACPI!EvalMethodComplete+0
+0x058 pdataCallBack : 0x8996866c _ObjData
+0x05c pvContext : 0xf789a0e0 Void
+0x060 Timer : _KTIMER
+0x088 Dpc : _KDPC
+0x0a8 pheapCurrent : 0x895680bc _heap
+0x0ac CtxtData : _ctxtdata
+0x0bc LocalHeap : _heap

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询