ACPI!ACPIDevicePowerProcessPhase0DeviceSubPhase1函数对节点PWR的处理第三次验证是否存在
1: kd> dv
ListEntry = 0xf743b5e0 0x899c41d0 - 0x899bfac0
DispatchTable = 0xf74388b0
Complete = 0x00 ''
powerRequest = 0x898f70b8
tempEntry = 0x899062e8 0x89906290 - 0x898f70b8
allWorkComplete = 0x01 ''
1: kd> dt ACPI_POWER_REQUEST 0x899062e8
+0x000 ListEntry : _LIST_ENTRY 0x89906290 - 0x898f70b8
+0x008 SerialListEntry : _LIST_ENTRY 0x89982720 - 0x89982720
+0x010 Signature : 0x5f534750
+0x014 DeviceExtension : 0x89982620 _DEVICE_EXTENSION
+0x018 RequestType : 0 ( AcpiPowerRequestDevice )
+0x01c FailedOnce : 0 ''
+0x020 u : __unnamed
+0x028 CallBack : (null)
+0x02c Context : (null)
+0x030 WorkDone : 3
+0x034 NextWorkDone : 0
+0x038 ResultData : _ObjData
+0x04c Status : 0n0
1: kd> u 0xf74388b0
ACPI!AcpiDevicePowerProcessPhase0Dispatch:
f74388b0 0000 add byte ptr eax,al
f74388b2 0000 add byte ptr eax,al
f74388b4 0000 add byte ptr eax,al
f74388b6 0000 add byte ptr eax,al
f74388b8 0000 add byte ptr eax,al
f74388ba 0000 add byte ptr eax,al
f74388bc 808843f7988843 or byte ptr eax-776708BDh,43h
f74388c3 f7d6 not esi
1: kd> dds f74388b0
f74388b0 00000000
f74388b4 00000000
f74388b8 00000000
f74388bc f7438880 ACPI!AcpiDevicePowerProcessPhase0Table1
f74388c0 f7438898 ACPI!AcpiDevicePowerProcessPhase0Table2
1: kd> kc
00 ACPI!ACPIDevicePowerProcessPhase0DeviceSubPhase1
01 ACPI!ACPIDevicePowerProcessGenericPhase
02 ACPI!ACPIDevicePowerDpc
03 nt!KiRetireDpcList
04 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
05 0x0
1: kd> dv
PowerRequest = 0x899062e8
deviceExtension = 0x899062e8
1: kd> dx -r1 ((ACPI!_ACPI_POWER_REQUEST *)0x899062e8)
((ACPI!_ACPI_POWER_REQUEST *)0x899062e8) : 0x899062e8 Type: _ACPI_POWER_REQUEST \*
+0x000\] ListEntry \[Type: _LIST_ENTRY
+0x008\] SerialListEntry \[Type: _LIST_ENTRY
+0x010\] Signature : 0x5f534750 \[Type: unsigned long
+0x014\] DeviceExtension : 0x89982620 \[Type: _DEVICE_EXTENSION \*
+0x018\] RequestType : AcpiPowerRequestDevice (0) \[Type: ACPI_POWER_REQUEST_TYPE
+0x01c\] FailedOnce : 0x0 \[Type: unsigned char
+0x020\] u \[Type: __unnamed
+0x028\] CallBack : 0x0 \[Type: void (\*)()
+0x02c\] Context : 0x0 \[Type: void \*
+0x030\] WorkDone : 0x1 \[Type: unsigned long
+0x034\] NextWorkDone : 0x0 \[Type: unsigned long
+0x038\] ResultData \[Type: _ObjData
+0x04c\] Status : 0 \[Type: long
//
// Get the device presence
//
status = ACPIGetDeviceHardwarePresenceAsync(
deviceExtension,
ACPIDeviceCompleteGenericPhase,
PowerRequest,
&(resultData->uipDataValue),
&(resultData->dwDataLen)
);
ACPIDevPrint( (
ACPI_PRINT_POWER,
deviceExtension,
"(0x%08lx): ACPIDevicePowerProcessPhase0DeviceSubPhase1 = 0x%08lx\n",
PowerRequest,
status
) );
1: kd> kc
00 ACPI!ACPIGet
01 ACPI!ACPIDevicePowerProcessPhase0DeviceSubPhase1
02 ACPI!ACPIDevicePowerProcessGenericPhase
03 ACPI!ACPIDevicePowerDpc
04 nt!KiRetireDpcList
05 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
06 0x0
1: kd> dv
Target = 0x89982620
ObjectID = 0x4154535f
Flags = 0x40041802
SimpleArgument = 0x00000000
SimpleArgumentSize = 0
CallBackRoutine = 0xf7400654
CallBackContext = 0x899062e8
Buffer = 0x89906328
BufferSize = 0x8990632c
completionRoutine = 0xf74076b8
1: kd> r
eax=89906328 ebx=89906320 ecx=89982620 edx=00000001 esi=899062e8 edi=89906334
eip=f74076b8 esp=f78aef1c ebp=f78aef50 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
1: kd> db f78aef1c
f78aef1c b4 0c 40 f7 20 26 98 89-5f 53 54 41 02 18 04 40 ..@. &.._STA...@
Device (PWR)
{
Name (_ADR, 0x00070003) // _ADR: Address
OperationRegion (PCI, PCI_Config, 0x40, 0x60)
Field (PCI, DWordAcc, NoLock, Preserve)
{
PMBA, 32,
Offset (0x50),
SBBA, 32
}
}
//
// Go out and see if the requested object is present
//
acpiObject = ACPIAmliGetNamedChild(
acpiObject,
ObjectID
);
if (!acpiObject) {
1: kd> gu
eax=00000000 ebx=f743b938 ecx=899b3c68 edx=00000000 esi=89461fc0 edi=89461fc8
eip=f74078dd esp=f78aeedc ebp=f78aef18 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
ACPIGetExit:
//
// Remember to not execute the callback routine
//
request->Flags |= GET_PROP_SKIP_CALLBACK;
//
// Call the completion routine to actually do the post-processing
//
(completionRoutine)(
acpiObject,
status,
&(request->ResultData),
request
);
1: kd> kc
00 ACPI!ACPIGetWorkerForInteger
01 ACPI!ACPIGet
02 ACPI!ACPIDevicePowerProcessPhase0DeviceSubPhase1
03 ACPI!ACPIDevicePowerProcessGenericPhase
04 ACPI!ACPIDevicePowerDpc
05 nt!KiRetireDpcList
06 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
07 0x0
1: kd> dv
AcpiObject = 0x00000000
Status = 0n-1073741772
Result = 0x89461fec
Context = 0x89461fc0
freeData = 0x00 ''
1: kd> ? 0n-1073741772
Evaluate expression: -1073741772 = c0000034
1: kd> kc
00 ACPI!ACPIGetConvertToDevicePresence
01 ACPI!ACPIGetWorkerForInteger
02 ACPI!ACPIGet
03 ACPI!ACPIDevicePowerProcessPhase0DeviceSubPhase1
04 ACPI!ACPIDevicePowerProcessGenericPhase
05 ACPI!ACPIDevicePowerDpc
06 nt!KiRetireDpcList
07 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
08 0x0
1: kd> dv
DeviceExtension = 0x89982620
Status = 0n-1073741772
Result = 0x89461fec
NTSTATUS
ACPIGetConvertToDevicePresence(
IN PDEVICE_EXTENSION DeviceExtension,
IN NTSTATUS Status,
IN POBJDATA Result,
IN ULONG Flags,
OUT PVOID *Buffer,
OUT ULONG *BufferSize
)
{
ULONG deviceStatus = STA_STATUS_DEFAULT;
1: kd> g
Breakpoint 4 hit
eax=00000000 ebx=c0000034 ecx=00000000 edx=00000000 esi=89982620 edi=0000000f
eip=f7409910 esp=f78aee74 ebp=f78aee94 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!ACPIInternalUpdateDeviceStatus:
f7409910 55 push ebp
1: kd> dv
DeviceExtension = 0x89982620
DeviceStatus = 0xf
oldIrql = 0x00 ''
1: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x89982620)
((ACPI!_DEVICE_EXTENSION *)0x89982620) : 0x89982620 Type: _DEVICE_EXTENSION \*
+0x000**\] Flags : 0x40100000000008** \[Type: unsigned __int64
+0x12c\] AcpiObject : 0x899b3c68 \[Type: _NSObj \*
+0x130\] DeviceObject : 0x0 \[Type: _DEVICE_OBJECT \*
+0x134\] TargetDeviceObject : 0x0 \[Type: _DEVICE_OBJECT \*
+0x138\] PhysicalDeviceObject : 0x0 \[Type: _DEVICE_OBJECT \*
+0x13c\] ParentExtension : 0x899c0d58 \[Type: _DEVICE_EXTENSION \*
+0x140\] ChildDeviceList \[Type: _LIST_ENTRY
+0x148\] SiblingDeviceList \[Type: _LIST_ENTRY
+0x150\] EjectDeviceHead \[Type: _LIST_ENTRY
+0x158\] EjectDeviceList \[Type: _LIST_ENTRY
1: kd> gu
eax=00000000 ebx=c0000034 ecx=00401000 edx=00000000 esi=89982620 edi=0000000f
eip=f7406da5 esp=f78aee80 ebp=f78aee94 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!ACPIGetConvertToDevicePresence+0xcf:
f7406da5 5e pop esi
1: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x89982620)
((ACPI!_DEVICE_EXTENSION *)0x89982620) : 0x89982620 Type: _DEVICE_EXTENSION \*
+0x000\] Flags :**0x40100000000008** \[Type: unsigned __int64
//
// Call the function
//
status = (powerTablepowerRequest-\>RequestType)( powerRequest ); //返回到这里
//
// Did we succeed?
//
if (NT_SUCCESS(status)) {
//
// Go to the next request
//
continue;
}
1: kd> kc
00 ACPI!ACPIDevicePowerProcessPhase0DeviceSubPhase2
01 ACPI!ACPIDevicePowerProcessGenericPhase
02 ACPI!ACPIDevicePowerDpc
03 nt!KiRetireDpcList
04 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
05 0x0
1: kd> dv
PowerRequest = 0x899062e8
1: kd> dx -r1 ((ACPI!_ACPI_POWER_REQUEST *)0x899062e8)
((ACPI!_ACPI_POWER_REQUEST *)0x899062e8) : 0x899062e8 Type: _ACPI_POWER_REQUEST \*
+0x000\] ListEntry \[Type: _LIST_ENTRY
+0x008\] SerialListEntry \[Type: _LIST_ENTRY
+0x010\] Signature : 0x5f534750 \[Type: unsigned long
+0x014\] DeviceExtension : 0x89982620 \[Type: _DEVICE_EXTENSION \*
+0x018\] RequestType : AcpiPowerRequestDevice (0) \[Type: ACPI_POWER_REQUEST_TYPE
+0x01c\] FailedOnce : 0x0 \[Type: unsigned char
+0x020\] u \[Type: __unnamed
+0x028\] CallBack : 0x0 \[Type: void (\*)()
+0x02c\] Context : 0x0 \[Type: void \*
+0x030\] WorkDone : 0x1 \[Type: unsigned long
+0x034\] NextWorkDone : 0x4 \[Type: unsigned long
+0x038\] ResultData \[Type: _ObjData
+0x04c\] Status : 0 \[Type: long
1: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x89982620)
((ACPI!_DEVICE_EXTENSION *)0x89982620) : 0x89982620 Type: _DEVICE_EXTENSION \*
+0x000\] Flags : 0x40100000000008 \[Type: unsigned __int64
+0x000\] UFlags \[Type: __unnamed
+0x008\] Signature : 0x5f534750 \[Type: unsigned long
+0x00c\] DebugFlags : 0x0 \[Type: unsigned long
+0x010\] DispatchTable : 0x0 \[Type: IRP_DISPATCH_TABLE \*
+0x014\] WorkContext \[Type: WORK_QUEUE_CONTEXT
+0x014\] Fdo \[Type: _FDO_DEVICE_EXTENSION
+0x014\] Filter \[Type: _FILTER_DEVICE_EXTENSION
+0x014\] Pdo \[Type: _PDO_DEVICE_EXTENSION
+0x058\] WorkQueue \[Type: EXTENSION_WORKER
+0x058\] Button \[Type: BUTTON_EXTENSION
+0x058\] Thermal \[Type: THERMAL_EXTENSION
+0x058\] LinkNode \[Type: LINK_NODE_EXTENSION
+0x058\] Dock \[Type: DOCK_EXTENSION
+0x058\] Processor \[Type: _PROCESSOR_DEVICE_EXTENSION
+0x088\] DeviceState : Stopped (0) \[Type: _ACPI_DEVICE_STATE
+0x08c\] PreviousState : Stopped (0) \[Type: _ACPI_DEVICE_STATE
+0x090\] PowerInfo \[Type: _ACPI_POWER_INFO
+0x10c\] DeviceID : 0x70003 : Unable to read memory at Address 0x70003 \[Type: unsigned char \*
+0x10c\] Address : 0x70003 \[Type: unsigned long
+0x110\] InstanceID : 0x0 \[Type: unsigned char \*
+0x114\] ResourceList : 0x0 \[Type: _CM_RESOURCE_LIST \*
+0x118\] PnpResourceList : 0x0 \[Type: _ObjData \*
+0x11c\] OutstandingIrpCount : 1 \[Type: long
+0x120\] ReferenceCount : 3 \[Type: long
+0x124\] HibernatePathCount : 0 \[Type: long
+0x128\] RemoveEvent : 0x0 \[Type: _KEVENT \*
+0x12c\] AcpiObject : 0x899b3c68 \[Type: _NSObj \*
+0x130\] DeviceObject : 0x0 \[Type: _DEVICE_OBJECT \*
+0x134\] TargetDeviceObject : 0x0 \[Type: _DEVICE_OBJECT \*
+0x138\] PhysicalDeviceObject : 0x0 \[Type: _DEVICE_OBJECT \*
+0x13c\] ParentExtension : 0x899c0d58 \[Type: _DEVICE_EXTENSION \*
+0x140\] ChildDeviceList \[Type: _LIST_ENTRY
+0x148\] SiblingDeviceList \[Type: _LIST_ENTRY
+0x150\] EjectDeviceHead \[Type: _LIST_ENTRY
+0x158\] EjectDeviceList \[Type: _LIST_ENTRY
1: kd> db 0x899b3c68
899b3c68 78 22 9b 89 00 3f 9b 89-ac ff 9a 89 ac 3c 9b 89 x"...?.......<..
899b3c78 50 57 52 5f 30 f3 9a 89-04 3c 9b 89 00 00 06 00 PWR_0....<......