news 2026/6/15 17:23:05

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/6/9 23:44:22

WorkshopDL终极指南:免Steam轻松获取创意工坊模组

WorkshopDL终极指南&#xff1a;免Steam轻松获取创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为无法访问Steam创意工坊而烦恼&#xff1f;WorkshopDL这款开…

作者头像 李华
网站建设 2026/6/13 13:31:18

Figma中文界面完整指南:3分钟快速安装终极教程

Figma中文界面完整指南&#xff1a;3分钟快速安装终极教程 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而苦恼吗&#xff1f;作为国内设计师必备的工具&#x…

作者头像 李华
网站建设 2026/6/12 18:57:49

APA第7版参考文献格式工具:让学术排版变得如此简单

你是否曾经在深夜赶论文时&#xff0c;被参考文献格式折磨得焦头烂额&#xff1f;作者顺序、出版年份、标点符号……这些看似简单的细节&#xff0c;却能让一篇优秀的学术论文失去专业感。现在&#xff0c;APA第7版参考文献生成工具将彻底改变这一现状&#xff0c;让格式排版从…

作者头像 李华
网站建设 2026/6/15 11:53:57

Calibre豆瓣插件:电子书元数据管理的智能解决方案

你是否曾经为手动整理电子书信息而烦恼&#xff1f;每本电子书都需要输入书名、作者、出版社等详细信息&#xff0c;这个过程既耗时又容易出错。Calibre豆瓣插件正是为解决这一痛点而生&#xff0c;它通过智能网络技术&#xff0c;让电子书元数据管理变得简单高效。 【免费下载…

作者头像 李华
网站建设 2026/6/10 11:20:31

如何轻松掌握文本恢复技术:从像素化到清晰化的完整指南

如何轻松掌握文本恢复技术&#xff1a;从像素化到清晰化的完整指南 【免费下载链接】unredacter Never ever ever use pixelation as a redaction technique 项目地址: https://gitcode.com/gh_mirrors/un/unredacter 在当今数字时代&#xff0c;信息安全已成为每个人都…

作者头像 李华
网站建设 2026/6/10 7:47:28

创新为何常在不经意间:“DeepSeek,起初只是一个副项目”

“DeepSeek&#xff0c;起初只是一个副项目”这一说法虽略有简化&#xff0c;但基本符合事实。根据权威资料&#xff0c;DeepSeek确实起源于幻方量化&#xff08;High-Flyer Quant&#xff09;内部的一个AGI&#xff08;人工通用智能&#xff09;研究项目。2023年4月&#xff0…

作者头像 李华