news 2026/4/16 12:12:51

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/16 11:03:01

鸣潮120帧一键解锁指南:WaveTools三步骤让你告别卡顿时代

还在为《鸣潮》画面卡顿而烦恼吗&#xff1f;想要体验丝滑流畅的120帧游戏效果却总是失败&#xff1f;今天咱们一起来搞定这个难题&#xff0c;通过WaveTools简单三步设置&#xff0c;让你的游戏体验直接起飞&#xff01; 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 …

作者头像 李华
网站建设 2026/4/13 14:59:00

QMC音频解密神器:5步搞定QQ音乐加密格式转换

QMC音频解密神器&#xff1a;5步搞定QQ音乐加密格式转换 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐的加密格式烦恼吗&#xff1f;&#x1f3b5; 这款开源…

作者头像 李华
网站建设 2026/4/8 8:34:01

鸣潮性能飞跃指南:3步解锁120帧极致流畅体验

鸣潮性能飞跃指南&#xff1a;3步解锁120帧极致流畅体验 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为鸣潮游戏卡顿而困扰吗&#xff1f;想要体验120帧的丝滑流畅却不知从何入手&#xff1f;作为你…

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

如何让2012-2015款老旧Mac重获新生:5步终极升级指南

如何让2012-2015款老旧Mac重获新生&#xff1a;5步终极升级指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为老旧Mac无法升级最新系统而烦恼吗&#xff1f;很多2…

作者头像 李华
网站建设 2026/4/16 9:22:33

kotlin的when表达式、数组循环等

fun main() {val age 18val sex "女"when(sex) { // when表达式"女" -> {when (age) {in 0..7 -> println("女孩")in 8..17 -> println("小女生")in 18..30 -> println("小姐姐")in 31..40 -> println(&qu…

作者头像 李华