2013-06-04 35 views
2

我試圖獲得系統中所有設備的列表及其連接方式。因此,我想實質上克隆IO Kit服務樹的結構(您可以使用IORegistryExplorer查看)。我如何迭代所有的鍵? (這是令我困惑的原因之一是因爲我不明白io_service,io_registryio_object之間的區別是什麼)。如何迭代IO Kit的密鑰?

回答

2

服務,註冊表和對象之間的區別僅在它們被使用的情況下。否則它們是完全一樣。 從IOTypes.h:

typedef io_object_t io_registry_entry_t; 
typedef io_object_t io_service_t; 

有文檔提供了有關Traversing the I/O Registry,其中還包括在遍歷整個註冊表的信息。 對於每個條目,你將不得不併保存它們與您的註冊表的表示形式。

所以你會使用IORegistryGetRootEntry(),打印/保存它的名字和屬性,然後遍歷IORegistryEntryGetChildIterator()的孩子。

您在CFDictionaryGetKeysAndValues()後獲得IORegistryEntryCreateCFProperties()的房產。對於這些值,你必須檢查它們打印/保存的類型(或使用CFSHOW)。當你真的想把它克隆到不同的結構(不同類型)時,你必須明確地處理每一個可能的CFTypeID。

我在 創建的工作原型https://gist.github.com/JonnyJD/6126680


編輯:

another SO answer的(C)源的ioreg代碼鏈接。這應該是打印/提取缺少的CFTypes的好資源。

相關問題