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 = (powerTable[powerRequest->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....<......