首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取(线段偏移)每个不同的平面(IODeviceTree,IOService ...)去大便吗?

如何获取(线段偏移)每个不同的平面(IODeviceTree,IOService ...)去大便吗?
EN

Stack Overflow用户
提问于 2018-05-04 13:43:56
回答 1查看 125关注 0票数 1

我想在不使用ioreg的情况下阅读analyze a plane (IODeviceTree IOUSB IOService IOACPIPlane),通过在内存中创建一个指针(段偏移量),我的问题是如何在C或Objective C中获取平面的地址。谢谢你的回答。

EN

回答 1

Stack Overflow用户

发布于 2018-05-10 01:25:33

首先,我不确定您在此上下文中所说的“段偏移”是什么意思,但问题的其余部分是有意义的,所以我将忽略这一部分作为我的答案。

第二,ioreg is available here的源代码,这样您就可以确切地看到它是如何做到的。

快速总结一下我将如何做到这一点:

调用您需要调用的主要函数是IORegistryCreateIterator().

  • Do
  • options参数设置为kIORegistryIterateRecursively -否则将很难找到图形调用plane参数,指定例如kIOServicePlane.
  • Keep IOIteratorNext() IOIteratorNext(),并且每次您得到一个注册表项时,尝试使用IORegistryIteratorEnterEntry()递归,每次您得到d19>返回时,使用IORegistryIteratorExitEntry().

单步退出一级

工作示例代码:

代码语言:javascript
复制
#include <stdio.h>
#include <IOKit/IOKitLib.h>

int main(int argc, const char * argv[])
{
    io_iterator_t iter = IO_OBJECT_NULL;
    unsigned recursion_level = 0;
    kern_return_t result = IORegistryCreateIterator(kIOMasterPortDefault, kIOServicePlane, 0, &iter);
    if (result == 0 && iter != IO_OBJECT_NULL)
    {
        while (true)
        {
            io_object_t entry = IOIteratorNext(iter);
            if (entry != IO_OBJECT_NULL)
            {
                io_name_t name = "";
                IORegistryEntryGetName(entry, name);
                printf("%*s+ %s\n", recursion_level * 2, "", name);
                ++recursion_level;
                result = IORegistryIteratorEnterEntry(iter);
                assert(result == KERN_SUCCESS);
            }
            else
            {
                if (recursion_level == 0)
                    break;

                result = IORegistryIteratorExitEntry(iter);
                assert(result == KERN_SUCCESS);
                --recursion_level;
            }
        }
    }

    return 0;
}

(确保链接到IOKit.framework)

当然,除了在每个注册表项上调用IORegistryEntryGetName()之外,您还可以做更有趣的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50167930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档