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

相关推荐
sitelist4 个月前
ACPI!ACPIDevicePowerProcessPhase1DeviceSubPhase1函数的作用处理DMAC节点
devicesubphase1·phase1devicesub