news 2026/3/13 4:09:22

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/10 18:15:13

Windows热键冲突终极解决方案:快速检测与智能管理指南

Windows热键冲突终极解决方案&#xff1a;快速检测与智能管理指南 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 在日常Windows使用中&#xff…

作者头像 李华
网站建设 2026/3/12 20:17:47

LRC歌词制作终极指南:3分钟学会专业级歌词同步技巧

想要为心爱的歌曲制作完美同步的歌词吗&#xff1f;LRC歌词制作工具正是你需要的免费开源解决方案。这款专为音乐爱好者设计的工具&#xff0c;通过直观的可视化界面彻底改变了传统歌词制作的复杂性&#xff0c;让零基础用户也能快速掌握专业级歌词同步技能。 【免费下载链接】…

作者头像 李华
网站建设 2026/3/3 20:34:47

TrollInstallerX终极部署手册:iOS越狱工具全方位解析与实战技巧

TrollInstallerX终极部署手册&#xff1a;iOS越狱工具全方位解析与实战技巧 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX作为iOS 14.0至16.6.1系统范…

作者头像 李华
网站建设 2026/3/4 3:33:54

如何快速掌握像素化文本恢复技术:信息安全新手的终极指南

如何快速掌握像素化文本恢复技术&#xff1a;信息安全新手的终极指南 【免费下载链接】unredacter Never ever ever use pixelation as a redaction technique 项目地址: https://gitcode.com/gh_mirrors/un/unredacter 在当今数字化时代&#xff0c;保护敏感信息安全变…

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

开源中文字体完全攻略:Source Han Serif CN零成本专业解决方案

还在为商业字体高昂的授权费用而烦恼吗&#xff1f;Source Han Serif CN作为一款完全免费的开源中文字体&#xff0c;彻底解决了专业设计师和开发者的字体选择困境。这款由Google与Adobe联合打造的开源字体项目&#xff0c;基于SIL Open Font License 1.1许可证&#xff0c;让你…

作者头像 李华