news 2026/7/8 6:47:53

ACPI!ACPIBuildProcessDevicePhaseAdrOrHid函数中的acpi!ACPIGet--ACPI中心函数完全调试分析--特别重要

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!ACPIBuildProcessDevicePhaseAdrOrHid函数中的acpi!ACPIGet--ACPI中心函数完全调试分析--特别重要

ACPI!ACPIBuildProcessDevicePhaseAdrOrHid函数中的acpi!ACPIGet--ACPI中心函数完全调试分析--特别重要


NTSTATUS
ACPIBuildProcessGenericList(
    IN  PLIST_ENTRY             ListEntry,
    IN  PACPI_BUILD_FUNCTION    *DispatchTable
    )
{

      //
        // Look at the dispatch table to see if there is a function to
        // call
        //
        buildFunction = DispatchTable[ workDone ];
        if (buildFunction != NULL) {

            //
            // Just to help us along, if we are going to the failure
            // path, then we should not update the Current Work Done field.
            // This gives us an easy means of find which step failed
            //
            if (workDone != WORK_DONE_FAILURE) {

                //
                // Mark the node as being in the state 'workDone'
                //
                buildRequest->CurrentWorkDone = workDone;

            }

            //
            // Mark the request as pending
            //
            workDone = InterlockedCompareExchange(
                &(buildRequest->WorkDone),
                WORK_DONE_PENDING,
                workDone
                );

            //
            // Call the function
            //
            status = (buildFunction)( buildRequest );


1: kd> g
Breakpoint 53 hit
eax=00000003 ebx=00000003 ecx=89df81a8 edx=00000001 esi=89df8198 edi=80b019f4
eip=f73fb118 esp=f78aef64 ebp=f78aef84 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!ACPIBuildProcessDevicePhaseAdrOrHid:
f73fb118 55              push    ebp
1: kd> kc
 #
00 ACPI!ACPIBuildProcessDevicePhaseAdrOrHid
01 ACPI!ACPIBuildProcessGenericList
02 ACPI!ACPIBuildDeviceDpc
03 nt!KiRetireDpcList
04 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
05 0x0
1: kd> kv
 # ChildEBP RetAddr  Args to Child              
00 f78aef60 f73fb914 89df8198 00000000 80afae90 ACPI!ACPIBuildProcessDevicePhaseAdrOrHid (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2844]
01 f78aef84 f73fc692 f743b888 f7438008 f7737980 ACPI!ACPIBuildProcessGenericList+0x50 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 4847]
02 f78aef9c 80a41432 f743b840 00000000 00000000 ACPI!ACPIBuildDeviceDpc+0xe0 (FPO: [4,0,0]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 659]
03 f78aeff4 80b00756 f791ac14 00000000 00000000 nt!KiRetireDpcList+0xd6 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\srv03rtm\base\ntos\ke\dpcsup.c @ 1076]
04 f78aeff8 f791ac14 00000000 00000000 00000000 nt!KiDispatchInterrupt+0x36 (FPO: [Uses EBP] [0,0,1]) [d:\srv03rtm\base\ntos\ke\i386\ctxswap.asm @ 226]
WARNING: Frame IP not in any known module. Following frames may be wrong.
05 80b00756 00000000 00000009 bb837775 00000128 0xf791ac14
1: kd> dv
   BuildRequest = 0x89df8198
       nsObject = 0x89df8198


1: kd> dx -id 0,0,ffffffff89dd5240 -r1 ((ACPI!_ACPI_BUILD_REQUEST *)0x89df8198)
((ACPI!_ACPI_BUILD_REQUEST *)0x89df8198)                 : 0x89df8198 [Type: _ACPI_BUILD_REQUEST *]
    [+0x000] ListEntry        [Type: _LIST_ENTRY]
    [+0x008] Signature        : 0x5f534750 [Type: unsigned long]
    [+0x00c] Flags            : 0x1 [Type: unsigned long]
    [+0x00c] UFlags           [Type: __unnamed]
    [+0x010] WorkDone         : 0x1 [Type: unsigned long]
    [+0x014] CurrentWorkDone  : 0x3 [Type: unsigned long]
    [+0x018] NextWorkDone     : 0x0 [Type: unsigned long]
    [+0x01c] BuildContext     : 0x89db4970 [Type: void *]
    [+0x020] Status           : 0 [Type: long]
    [+0x024] CurrentObject    : 0x0 [Type: _NSObj *]
    [+0x028] CallBack         : 0x0 [Type: void (*)(void *,void *,long)]
    [+0x02c] CallBackContext  : 0x0 [Type: void *]
    [+0x030] DeviceRequest    [Type: __unnamed]
    [+0x030] RunRequest       [Type: __unnamed]
    [+0x030] SynchronizeRequest [Type: __unnamed]
    [+0x044] Integer          : 0x0 [Type: unsigned long]
    [+0x044] String           : 0x0 [Type: unsigned char *]
    [+0x044] TargetListEntry  : 0x0 [Type: _LIST_ENTRY *]


1: kd> dt acpi!_DEVICE_EXTENSION 0x89db4970
   +0x000 Flags            : 0x00400000`00000008
   +0x000 UFlags           : __unnamed
   +0x008 Signature        : 0x5f534750
   +0x00c DebugFlags       : 0
   +0x010 DispatchTable    : (null)
   +0x014 WorkContext      : WORK_QUEUE_CONTEXT
   +0x014 Fdo              : _FDO_DEVICE_EXTENSION
   +0x014 Filter           : _FILTER_DEVICE_EXTENSION
   +0x014 Pdo              : _PDO_DEVICE_EXTENSION
   +0x058 WorkQueue        : EXTENSION_WORKER
   +0x058 Button           : BUTTON_EXTENSION
   +0x058 Thermal          : THERMAL_EXTENSION
   +0x058 LinkNode         : LINK_NODE_EXTENSION
   +0x058 Dock             : DOCK_EXTENSION
   +0x058 Processor        : _PROCESSOR_DEVICE_EXTENSION
   +0x088 DeviceState      : 0 ( Stopped )
   +0x08c PreviousState    : 0 ( Stopped )
   +0x090 PowerInfo        : _ACPI_POWER_INFO
   +0x10c DeviceID         : (null)
   +0x10c Address          : 0
   +0x110 InstanceID       : (null)
   +0x114 ResourceList     : (null)
   +0x118 PnpResourceList  : (null)
   +0x11c OutstandingIrpCount : 0n1
   +0x120 ReferenceCount   : 0n82
   +0x124 HibernatePathCount : 0n0
   +0x128 RemoveEvent      : (null)
   +0x12c AcpiObject       : 0x89da3fac _NSObj
   +0x130 DeviceObject     : (null)
   +0x134 TargetDeviceObject : (null)
   +0x138 PhysicalDeviceObject : (null)
   +0x13c ParentExtension  : 0x89db4ea0 _DEVICE_EXTENSION
   +0x140 ChildDeviceList  : _LIST_ENTRY [ 0x89db4950 - 0x89d41bd0 ]
   +0x148 SiblingDeviceList : _LIST_ENTRY [ 0x89da2d00 - 0x89db4fe0 ]
   +0x150 EjectDeviceHead  : _LIST_ENTRY [ 0x89db4ac0 - 0x89db4ac0 ]
   +0x158 EjectDeviceList  : _LIST_ENTRY [ 0x89db4ac8 - 0x89db4ac8 ]


1: kd> dt _nsobj 0x89da3fac
ACPI!_NSObj
   +0x000 list             : _List
   +0x008 pnsParent        : 0x89da30f0 _NSObj
   +0x00c pnsFirstChild    : 0x89da4024 _NSObj
   +0x010 dwNameSeg        : 0x30494350
   +0x014 hOwner           : 0x89da3330 Void
   +0x018 pnsOwnedNext     : 0x89da3f4c _NSObj
   +0x01c ObjData          : _ObjData
   +0x030 Context          : 0x89db4970 Void
   +0x034 dwRefCount       : 0
1: kd> db 0x89da3fac
89da3fac  4c 3f da 89 ac 80 da 89-f0 30 da 89 24 40 da 89  L?.......0..$@..
89da3fbc  50 43 49 30 30 33 da 89-4c 3f da 89 00 00 06 00  PCI003..L?......

1: kd> dx -id 0,0,ffffffff89dd5240 -r1 ((ACPI!_NSObj *)0x89da30f0)
((ACPI!_NSObj *)0x89da30f0)                 : 0x89da30f0 [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x89da3024 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x89da3474 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x5f42535f [Type: unsigned long]
    [+0x014] hOwner           : 0x0 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x0 [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x89db4ea0 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]
1: kd> db 0x89da30f0
89da30f0  ac 30 da 89 34 31 da 89-24 30 da 89 74 34 da 89  .0..41..$0..t4..
89da3100  5f 53 42 5f 00 00 00 00-00 00 00 00 00 00 00 00  _SB_............


1: kd> dx -id 0,0,ffffffff89dd5240 -r1 ((ACPI!_NSObj *)0x89da3024)
((ACPI!_NSObj *)0x89da3024)                 : 0x89da3024 [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x0 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x89da3068 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x5f5f5f5c [Type: unsigned long]
    [+0x014] hOwner           : 0x0 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x0 [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x0 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]
1: kd> db 0x89da3024
89da3024  00 00 00 00 00 00 00 00-00 00 00 00 68 30 da 89  ............h0..
89da3034  5c 5f 5f 5f 00 00 00 00-00 00 00 00 00 00 00 00  \___............

\___
_SB_
PCI0

    //
    // We need to name this node, so lets determine if there is an _HID
    // or an _ADR is present
    //
    nsObject = ACPIAmliGetNamedChild(
        deviceExtension->AcpiObject,
        PACKED_HID
        );
    if (nsObject == NULL) {

1: kd> dt _nsobj 0x89da3fac
ACPI!_NSObj
   +0x000 list             : _List
   +0x008 pnsParent        : 0x89da30f0 _NSObj
   +0x00c pnsFirstChild    : 0x89da4024 _NSObj
   +0x010 dwNameSeg        : 0x30494350
   +0x014 hOwner           : 0x89da3330 Void
   +0x018 pnsOwnedNext     : 0x89da3f4c _NSObj
   +0x01c ObjData          : _ObjData
   +0x030 Context          : 0x89db4970 Void
   +0x034 dwRefCount       : 0

1: kd> dx -id 0,0,ffffffff89dd5240 -r1 ((ACPI!_NSObj *)0x89da4024)
((ACPI!_NSObj *)0x89da4024)                 : 0x89da4024 [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x89da3fac [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x0 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x4449485f [Type: unsigned long]
    [+0x014] hOwner           : 0x89da3330 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x89da3fac [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x0 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]
1: kd> db 0x89da4024
89da4024  64 d0 d4 89 68 40 da 89-ac 3f da 89 00 00 00 00  d...h@...?......
89da4034  5f 48 49 44 30 33 da 89-ac 3f da 89 00 00 01 00  _HID03...?......
89da4044  00 00 00 00 41 d0 0a 03-00 00 00 00 00 00 00 00  ....A...........
89da4054  00 00 00 00 00 00 00 00-48 4e 53 4f 44 00 00 00  ........HNSOD...
89da4064  00 30 da 89 24 40 da 89-ac 40 da 89 ac 3f da 89  .0..$@...@...?..
89da4074  00 00 00 00 5f 43 49 44-30 33 da 89 24 40 da 89  ...._CID03..$@..
89da4084  00 00 01 00 00 00 00 00-41 d0 0a 08 00 00 00 00  ........A.......
89da4094  00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f  ............HNSO


    nsObject = ACPIAmliGetNamedChild(            eax=89da4024
        deviceExtension->AcpiObject,
        PACKED_HID
        );
    if (nsObject == NULL) {

1: kd> p
eax=89da4024 ebx=00000003 ecx=4449485f edx=00000001 esi=89df8198 edi=89db4970
eip=f73fb134 esp=f78aef54 ebp=f78aef60 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!ACPIBuildProcessDevicePhaseAdrOrHid+0x1c:
f73fb134 33db            xor     ebx,ebx

    } else {

        //
        // Remember which name space object we are evaluating
        //
        BuildRequest->CurrentObject = nsObject;

        //
        // When we go down this path, we actually want to build the UID before
        // the HID because that makes deciding wether to run the CID much easier
        //
        nsObject = ACPIAmliGetNamedChild(            eax=00000000
            deviceExtension->AcpiObject,
            PACKED_UID
            );

1: kd>

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 11:24:01

14.C++入门:vector|手撕vector

vector深度剖析及模拟实现 vector.h #pragma once #include<assert.h>namespace bit {template<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;vector(){}/*vector(const vector<T>& v){_start new T[v.capacity(…

作者头像 李华
网站建设 2026/7/4 13:15:55

技术文章大纲:Bug悬案侦破大会

c技术文章大纲&#xff1a;Bug悬案侦破大会背景与活动目的通过模拟真实开发中的复杂Bug场景&#xff0c;提升团队协作与问题排查能力结合案例分析&#xff0c;分享常见Bug类型及其背后的技术原理培养开发者系统性思维和逆向工程能力活动形式设计悬案设定&#xff1a;选取历史上…

作者头像 李华
网站建设 2026/6/30 16:44:41

MATLAB高效算法实战技术文章大纲1

MATLAB高效算法实战技术文章大纲核心优化策略向量化运算&#xff1a;避免循环&#xff0c;利用矩阵运算提升速度&#xff0c;例如 sum(A, 2)替代逐行求和循环。预分配内存&#xff1a;通过 zeros() 或 prealloc() 提前分配数组空间&#xff0c;减少动态扩容开销。内置函数优先&…

作者头像 李华
网站建设 2026/7/2 8:26:57

大规模语言模型在复杂系统非线性动态预测中的创新应用

大规模语言模型在复杂系统非线性动态预测中的创新应用关键词&#xff1a;大规模语言模型、复杂系统、非线性动态预测、创新应用、人工智能摘要&#xff1a;本文深入探讨了大规模语言模型在复杂系统非线性动态预测中的创新应用。首先介绍了研究的背景、目的、预期读者等内容&…

作者头像 李华