news 2026/4/23 10:12:27

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/4/17 23:27:50

鸣潮120帧解锁终极指南:完整解决方案与技术深度解析

鸣潮120帧解锁终极指南&#xff1a;完整解决方案与技术深度解析 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 鸣潮性能优化是每个追求极致游戏体验玩家的核心需求&#xff0c;WaveTools配置为这一目标提…

作者头像 李华
网站建设 2026/4/23 10:47:38

Patreon内容批量下载终极教程:简单三步实现高效备份

还在为Patreon内容无法批量下载而烦恼吗&#xff1f;本教程将为你详细介绍如何使用PatreonDownloader工具&#xff0c;轻松实现创作者内容的批量下载和智能管理。 【免费下载链接】PatreonDownloader Powerful tool for downloading content posted by creators on patreon.com…

作者头像 李华
网站建设 2026/4/22 20:32:34

KeymouseGo:桌面自动化终极解决方案,彻底告别重复劳动

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

作者头像 李华
网站建设 2026/4/17 16:35:02

Diaphora二进制差异分析工具扩展与定制深度指南

Diaphora二进制差异分析工具扩展与定制深度指南 【免费下载链接】diaphora Diaphora, the most advanced Free and Open Source program diffing tool. 项目地址: https://gitcode.com/gh_mirrors/di/diaphora Diaphora作为业界领先的开源二进制差异分析工具&#xff0c…

作者头像 李华
网站建设 2026/4/8 14:06:48

终极解密指南:轻松提取游戏音频的完整教程

终极解密指南&#xff1a;轻松提取游戏音频的完整教程 【免费下载链接】acbDecrypter 项目地址: https://gitcode.com/gh_mirrors/ac/acbDecrypter 想要从游戏中提取那些令人难忘的原声音乐吗&#xff1f;acbDecrypter正是您需要的利器&#xff01;这款开源工具能够将游…

作者头像 李华