ACPI!ACPIBuildProcessDeviceGenericEvalStrict函数对节点USB的子节点PRW的处理
Device (USB)
{
Name (_ADR, 0x00070002) // _ADR: Address
Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake
{
0x08,
0x01
})
}
1: kd> g
Breakpoint 33 hit
eax=899b3fe0 ebx=89982468 ecx=89982448 edx=00000001 esi=89982418 edi=8998245c
eip=f7415242 esp=f78aef34 ebp=f78aef60 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
ACPI!AMLIAsyncEvalObject:
f7415242 55 push ebp
1: kd> kc
#
00 ACPI!AMLIAsyncEvalObject
01 ACPI!ACPIBuildProcessDeviceGenericEvalStrict
02 ACPI!ACPIBuildProcessGenericList
03 ACPI!ACPIBuildDeviceDpc
04 nt!KiRetireDpcList
05 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
06 0x0
1: kd> dv
pns = 0x899b3fe0
pdataResult = 0x89982448
icArgs = 0n0
pdataArgs = 0x00000000
pfnAsyncCallBack = 0xf73fa5bc
pvContext = 0x89982418
pHData = 0x00000008
1: kd> dx -r1 ((ACPI!_NSObj *)0x899b3fe0)
((ACPI!_NSObj *)0x899b3fe0) : 0x899b3fe0 [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x899b3f00 [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x0 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x5752505f [Type: unsigned long]
[+0x014] hOwner : 0x899af330 [Type: void *]
[+0x018] pnsOwnedNext : 0x899b3f44 [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x0 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
1: kd> db 0x899b3fe0
899b3fe0 44 3f 9b 89 44 3f 9b 89-00 3f 9b 89 00 00 00 00 D?..D?...?......
899b3ff0 5f 50 52 57 30 f3 9a 89-44 3f 9b 89 00 00 04 00 _PRW0...D?......
899b4000 00 00 00 00 00 00 00 00-2c 00 00 00 a8 3f 9b 89 ........,....?..
899b4010 00 00 00 00 00 00 00 00-48 4e 53 4f 44 00 00 00 ........HNSOD...
899b4020 00 f0 9a 89 00 3f 9b 89-e4 b3 96 89 ac ff 9a 89 .....?..........
899b4030 68 40 9b 89 49 44 45 5f-30 f3 9a 89 e0 3f 9b 89 h@..IDE_0....?..
899b4040 00 00 06 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b4050 00 00 00 00 b0 22 98 89-00 00 00 00 48 4e 53 4f ....."......HNSO
1: kd> db 0x899b3f00
899b3f00 68 3c 9b 89 24 40 9b 89-ac ff 9a 89 44 3f 9b 89 h<..$@......D?..
899b3f10 55 53 42 5f 30 f3 9a 89-9c 3e 9b 89 00 00 06 00 USB_0....>......
899b3f20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b3f30 68 24 98 89 00 00 00 00-48 4e 53 4f 44 00 00 00 h$......HNSOD...
899b3f40 00 f0 9a 89 e0 3f 9b 89-e0 3f 9b 89 00 3f 9b 89 .....?...?...?..
899b3f50 00 00 00 00 5f 41 44 52-30 f3 9a 89 00 3f 9b 89 ...._ADR0....?..
899b3f60 00 00 01 00 00 00 00 00-02 00 07 00 00 00 00 00 ................
899b3f70 00 00 00 00 00 00 00 00-00 00 00 00 48 4d 45 54 ............HMET
#define DATAF_NSOBJ_DEFUNC 0x00000004
1: kd> kc
#
00 ACPI!AsyncEvalObject
01 ACPI!AMLIAsyncEvalObject
02 ACPI!ACPIBuildProcessDeviceGenericEvalStrict
03 ACPI!ACPIBuildProcessGenericList
04 ACPI!ACPIBuildDeviceDpc
05 nt!KiRetireDpcList
06 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
07 0x0
1: kd> dv
pns = 0x899b3fe0
pdataResult = 0x89982448
icArgs = 0n0
pdataArgs = 0x00000000
pfnAsyncCallBack = 0xf73fa5bc
pvContext = 0x89982418
fAsync = 0x01 ''
pctxt = 0x00000008
1: kd> g
Breakpoint 42 hit
eax=00000000 ebx=899b3ffc ecx=899b3ffc edx=89895fe4 esi=f7438ca8 edi=00000000
eip=f74207d4 esp=f78aeedc ebp=f78aeefc iopl=0 nv up ei ng nz ac pe cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000297
ACPI!RestartContext:
f74207d4 55 push ebp
1: kd> kc
#
00 ACPI!RestartContext
01 ACPI!AsyncEvalObject
02 ACPI!AMLIAsyncEvalObject
03 ACPI!ACPIBuildProcessDeviceGenericEvalStrict
04 ACPI!ACPIBuildProcessGenericList
05 ACPI!ACPIBuildDeviceDpc
06 nt!KiRetireDpcList
07 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
08 0x0
1: kd> dv
pctxt = 0x89894000
fDelayExecute = 0x00 ''
else if ((prest = NEWRESTOBJ(sizeof(RESTART))) != NULL)
{
pctxt->dwfCtxt |= CTXTF_NEED_CALLBACK;
prest->pctxt = pctxt;
ExInitializeWorkItem(&prest->WorkItem, RestartCtxtPassive, prest);
OSQueueWorkItem(&prest->WorkItem);
rc = AMLISTA_PENDING;
}