2009-02-04 60 views
2

我正在開發將用作I/O Kit驅動程序的OS X內核擴展(kext)。然而,這個驅動程序將嚴格「虛擬」;它不會與任何硬件接口。訪問I/O目錄類對象

OS X保留加載到內核中的所有驅動程序的目錄(I/O目錄)。它還保留一個註冊表(I/O註冊表),其中包含與硬件設備匹配並且當前正在控制硬件的I/O目錄驅動程序。

由於我的驅動程序不依賴於硬件,也不「匹配」,因此它只會加載到I/O目錄中,而不會註冊到I/O註冊表中。這會導致問題,因爲獲取I/O驅動程序對象的API僅限於在I/O註冊表中註冊的驅動程序,並且不會訪問I/O目錄中的對象。但是,我試過matching to my driver using the recommended APIs,正如我之前提到的,這些API不公開I/O Catalog條目。

我的最終目標是獲得對我的驅動程序的參考,以transfer in data with the "setProperties" method。如果一切都失敗,我can use a combination of syscall, copyin and copyout將數據傳入和傳出驅動程序,但我目前對該解決方案不感興趣。

簡而言之:有沒有辦法獲得I/O目錄中的驅動程序的引用,但是I/O註冊表中的而不是

更新:觀察我的意思是,看看IORegistryExplorer以下兩個屏幕截圖:

註冊駕駛員易於接近through the API ,但是未註冊的驅動程序驅動程序將不匹配使用IOServiceGetMatchingServices(...)。我如何獲得未加註冊的加載驅動程序的引用?

欲瞭解更多信息,請訪問:

回答

0

你可以得到你的驅動程序,而無需一個硬件加載。您可能想要考慮針對「IOKit」或「IOBSD」做類似「IOResourceMatching」的操作。當這些資源可用時,這將導致被動匹配在您的驅動程序上觸發。

+0

我更新了問題以回答您的答案。驅動程序加載正常,但不會在I/O註冊表中註冊。 plist已經包含一個「IOResourceMatch」條目,與「IOKit」完全匹配,就像Dont_Steal_Mac_OS_X驅動程序一樣。 – mpiche 2009-02-05 03:34:54