news 2026/4/10 15:03:23

ACPI!_NSObj结构的链表结构和全局变量ACPI!gpnsNameSpaceRoot

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!_NSObj结构的链表结构和全局变量ACPI!gpnsNameSpaceRoot

ACPI!_NSObj结构的链表结构和全局变量ACPI!gpnsNameSpaceRoot

       //
        // First pass, mark the objects defunc'd.
        //
        for (pns = powner->pnsObjList; pns != NULL; pns = pns->pnsOwnedNext) {

            pns->ObjData.dwfData |= DATAF_NSOBJ_DEFUNC;

        }

        //
        // Second pass, find the device in the list to be removed
        //
        for (pns = powner->pnsObjList; pns != NULL; pns = pnsNext) {

            pnsNext = pns->pnsOwnedNext;
            if (pns->ObjData.dwDataType == OBJTYPE_DEVICE ||
                pns->ObjData.dwDataType == OBJTYPE_POWERRES ||
                pns->ObjData.dwDataType == OBJTYPE_THERMALZONE ||
                pns->ObjData.dwDataType == OBJTYPE_PROCESSOR) {

                if (pnsPrev) {

                    pnsPrev->pnsOwnedNext = pns->pnsOwnedNext;

                } else {

                    powner->pnsObjList = pns->pnsOwnedNext;

                }

//dwDataType values
typedef enum _OBJTYPES {
    OBJTYPE_UNKNOWN = 0,
    OBJTYPE_INTDATA,
    OBJTYPE_STRDATA,
    OBJTYPE_BUFFDATA,
    OBJTYPE_PKGDATA,
    OBJTYPE_FIELDUNIT,
    OBJTYPE_DEVICE,        6


VOID EXPORT ListInsertTail(PLIST plist, PPLIST pplistHead)
{
    ASSERT(pplistHead != NULL);
    ENTER((4, "ListInsertTail(plist=%p,plistHead=%p)\n", plist, *pplistHead));

    ASSERT(plist != NULL);
    if (*pplistHead == NULL)
    {
        //
        // List is empty, so this becomes the head.
        //
        *pplistHead = plist;
        plist->plistPrev = plist->plistNext = plist;
    }
    else
    {
        plist->plistNext = *pplistHead;
        plist->plistPrev = (*pplistHead)->plistPrev;
        (*pplistHead)->plistPrev->plistNext = plist;
        (*pplistHead)->plistPrev = plist;
    }

    EXIT((4, "ListInsertTail! (plistHead=%p)\n", *pplistHead));
}       //ListInsertTail


参考:
0: kd> dt _nsobj 0x899af134
ACPI!_NSObj
   +0x000 list             : _List
   +0x008 pnsParent        : 0x899af024 _NSObj
   +0x00c pnsFirstChild    : (null)
   +0x010 dwNameSeg        : 0x5f49535f
   +0x014 hOwner           : (null)
   +0x018 pnsOwnedNext     : (null)
   +0x01c ObjData          : _ObjData
   +0x030 Context          : (null)
   +0x034 dwRefCount       : 0
0: kd> dt HEAPOBJHDR 0x899af134-c
ACPI!HEAPOBJHDR
   +0x000 dwSig            : 0x4f534e48
   +0x004 dwLen            : 0x44
   +0x008 pheap            : 0x899af000 _heap
   +0x00c list             : _List
0: kd> ?c+38
Evaluate expression: 68 = 00000044
参考:

0: kd> dt HEAPOBJHDR 0x899af57c-c
ACPI!HEAPOBJHDR
   +0x000 dwSig            : 0x4f534e48
   +0x004 dwLen            : 0x44
   +0x008 pheap            : 0x899af000 _heap
   +0x00c list             : _List
0: kd> db 0x899af57c-c
899af570  48 4e 53 4f 44 00 00 00-00 f0 9a 89 74 f4 9a 89  HNSOD.......t...
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_List *)0x899af57c)
((ACPI!_List *)0x899af57c)                 : 0x899af57c [Type: _List *]
    [+0x000] plistPrev        : 0x899af474 [Type: _List *]
    [+0x004] plistNext        : 0x899af5c0 [Type: _List *]

0: kd> dt HEAPOBJHDR 0x899af5c0-c
ACPI!HEAPOBJHDR
   +0x000 dwSig            : 0x4f534e48
   +0x004 dwLen            : 0x44
   +0x008 pheap            : 0x899af000 _heap
   +0x00c list             : _List
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_List *)0x899af5c0))
(*((ACPI!_List *)0x899af5c0))                 [Type: _List]
    [+0x000] plistPrev        : 0x899af57c [Type: _List *]
    [+0x004] plistNext        : 0x899af604 [Type: _List *]
0: kd> db 0x899af5c0-c
899af5b4  48 4e 53 4f 44 00 00 00-00 f0 9a 89 7c f5 9a 89  HNSOD.......|...


0: kd> dt HEAPOBJHDR 0x899af604-c
ACPI!HEAPOBJHDR
   +0x000 dwSig            : 0x4f534e48
   +0x004 dwLen            : 0x44
   +0x008 pheap            : 0x899af000 _heap
   +0x00c list             : _List
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_List *)0x899af604))
(*((ACPI!_List *)0x899af604))                 [Type: _List]
    [+0x000] plistPrev        : 0x899af5c0 [Type: _List *]
    [+0x004] plistNext        : 0x899af668 [Type: _List *]

0: kd> dt HEAPOBJHDR 0x899af668-c
ACPI!HEAPOBJHDR
   +0x000 dwSig            : 0x4f534e48
   +0x004 dwLen            : 0x44
   +0x008 pheap            : 0x899af000 _heap
   +0x00c list             : _List
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_List *)0x899af668))
(*((ACPI!_List *)0x899af668))                 [Type: _List]
    [+0x000] plistPrev        : 0x899af604 [Type: _List *]
    [+0x004] plistNext        : 0x899af6cc [Type: _List *]

0: kd> x acpi!*owner*
f743a8e8          ACPI!gplistObjOwners = 0x899af330
f743a9d0          ACPI!gmutOwnerList = struct _mutex
f741acfc          ACPI!InsertOwnerObjList (struct _objowner *, struct _NSObj *)
f741aa29          ACPI!NewObjOwner (struct _heap *, struct _objowner **)
f741ab03          ACPI!FreeObjOwner (struct _objowner *, unsigned char)
f742ace0          ACPI!RtlDeleteOwnersRanges (_RtlDeleteOwnersRanges@8)
f742b224          ACPI!_imp__RtlDeleteOwnersRanges = <no type information>
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_List *)0x899af330)
((ACPI!_List *)0x899af330)                 : 0x899af330 [Type: _List *]
    [+0x000] plistPrev        : 0x899af330 [Type: _List *]
    [+0x004] plistNext        : 0x899af330 [Type: _List *]


0: kd> dt _OBJOWNER 0x899af330
ACPI!_objowner
   +0x000 list             : _List
   +0x008 dwSig            : 0x524e574f
   +0x00c pnsObjList       : 0x899affac _NSObj

0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899affac)            1
((ACPI!_NSObj *)0x899affac)                 : 0x899affac [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x899af0f0 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x0 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x30494350 [Type: unsigned long]
    [+0x014] hOwner           : 0x899af330 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x899aff4c [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x899c0d58 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]

0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899aff4c)            2
((ACPI!_NSObj *)0x899aff4c)                 : 0x899aff4c [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x899af0f0 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x0 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x4c4d454f [Type: unsigned long]
    [+0x014] hOwner           : 0x899af330 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x899afccc [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x0 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]

0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899afccc)            3
((ACPI!_NSObj *)0x899afccc)                 : 0x899afccc [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x899af0f0 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x0 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x494e495f [Type: unsigned long]
    [+0x014] hOwner           : 0x899af330 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x899afc88 [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x0 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899afc88)            4
((ACPI!_NSObj *)0x899afc88)                 : 0x899afc88 [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x899af0f0 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x0 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x47414c46 [Type: unsigned long]
    [+0x014] hOwner           : 0x899af330 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x899afc44 [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x0 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899afc44)            5
((ACPI!_NSObj *)0x899afc44)                 : 0x899afc44 [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x899af0f0 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x0 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x534f4f54 [Type: unsigned long]
    [+0x014] hOwner           : 0x899af330 [Type: void *]
    [+0x018] pnsOwnedNext     : 0x899afbe0 [Type: _NSObj *]
    [+0x01c] ObjData          [Type: _ObjData]
    [+0x030] Context          : 0x0 [Type: void *]
    [+0x034] dwRefCount       : 0x0 [Type: unsigned long]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899afbe0)        6
((ACPI!_NSObj *)0x899afbe0)                 : 0x899afbe0 [Type: _NSObj *]
    [+0x000] list             [Type: _List]
    [+0x008] pnsParent        : 0x899af0f0 [Type: _NSObj *]
    [+0x00c] pnsFirstChild    : 0x0 [Type: _NSObj *]
    [+0x010] dwNameSeg        : 0x4448534d [Type: unsigned long]
    [+0x014] hOwne

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

qmc-decoder终极指南:一键解锁QMC加密音频,享受自由音乐体验

qmc-decoder终极指南&#xff1a;一键解锁QMC加密音频&#xff0c;享受自由音乐体验 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为无法播放的QMC加密音频而烦恼吗&…

作者头像 李华
网站建设 2026/4/1 3:31:29

KeymouseGo桌面自动化工具:彻底告别重复性工作

KeymouseGo桌面自动化工具&#xff1a;彻底告别重复性工作 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 还在为每天重复的…

作者头像 李华
网站建设 2026/3/26 21:38:21

vJoy虚拟手柄:解锁输入设备的无限潜能

在游戏世界和数字控制领域&#xff0c;你是否曾因物理手柄的局限性而束手束脚&#xff1f;vJoy虚拟手柄项目正在重新定义输入控制的可能性&#xff0c;将普通键盘鼠标转化为专业的游戏控制器&#xff0c;为开发者、游戏玩家和创意工作者提供前所未有的控制自由度。 【免费下载链…

作者头像 李华
网站建设 2026/4/3 4:32:27

LRC歌词制作终极指南:5分钟掌握专业级歌词同步技巧

还在为歌词与音乐不同步而烦恼吗&#xff1f;传统歌词制作工具操作复杂、学习成本高&#xff0c;让许多音乐爱好者望而却步。现在&#xff0c;一款名为LRC Maker的开源工具彻底改变了这一现状&#xff0c;让歌词制作变得简单高效。 【免费下载链接】lrc-maker 歌词滚动姬&#…

作者头像 李华
网站建设 2026/4/10 7:44:48

仿写文章prompt:Windows 11硬件限制绕过技术指南

仿写文章prompt&#xff1a;Windows 11硬件限制绕过技术指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat 创作核心要…

作者头像 李华
网站建设 2026/4/7 4:20:48

桌面自动化革命:KeymouseGo如何重塑你的工作流程

在数字化工作环境中&#xff0c;重复性任务已成为效率的最大阻碍。每天面对成百上千次的鼠标点击和键盘输入&#xff0c;不仅消耗宝贵时间&#xff0c;更让创造力在机械重复中消磨殆尽。KeymouseGo的出现&#xff0c;正是为了解决这一痛点。 【免费下载链接】KeymouseGo 类似按…

作者头像 李华