ACPI!ACPIDevicePowerProcessPhase0DeviceSubPhase1函数对节点PWR的处理第三次验证是否存在

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