IOKit, IORegistry und Kext-Namen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • IOKit, IORegistry und Kext-Namen?

    Hallo zusammen,

    ich schreibe gerade ein Tool, mit dem man ein USB Gerät ansteuern können soll.
    Leider bindet sich gerne mal ein Apple Kext (AppleUSBCDC) dran.
    In dem Fall bekomme ich beim Öffnen des Devices mittels

    Quellcode

    1. <span class="hljs-function"><span class="hljs-title">ret</span> = <span class="hljs-params">(*usbDevice)</span>-></span>USBDeviceOpenSeize(usbDevice);


    ein kIOReturnExclusiveAccess.
    Um den Anwender dann darauf hinzuweisen, dass er entweder den "Codeless Kext" installieren soll, oder den Apple Kext mittels kextunload entladen muss, würde ich gerne den Namen des Kext ausgeben. Leider bekomm ich das nicht hin. Mein Versuch

    Quellcode

    1. io_name_t devicename;
    2. <span class="hljs-keyword">if</span> (IORegistryEntryGetNameInPlane(usbRef,kIOServicePlane, devicename) == KERN_SUCCESS) {
    3. <span class="hljs-keyword">printf</span>(<span class="hljs-string">"Device name: <span class="hljs-variable">%s</span>\n"</span>, (devicename));
    4. }

    Erzeugt leider nicht "AppleUSBCDC" sondern "IOUSBDevice".

    Der USB Proper von Apple zeigt das auch an:

    Quellcode

    1. <span class="hljs-number">5</span><span class="hljs-symbol">:</span> <span class="hljs-constant">CommunicationsDevice</span><span class="hljs-variable">@14340000</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IOUSBDevice</span>></span>
    2. <span class="hljs-constant">AppleUSBCDC</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AppleUSBCDC</span>></span>
    3. <span class="hljs-constant">IOUSBInterface</span><span class="hljs-variable">@0</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IOUSBInterface</span>></span>
    4. <span class="hljs-constant">AppleUSBCDCACMControl</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AppleUSBCDCACMControl</span>></span>
    5. <span class="hljs-constant">IOUSBInterface</span><span class="hljs-variable">@1</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IOUSBInterface</span>></span>
    6. <span class="hljs-constant">AppleUSBCDCACMData</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AppleUSBCDCACMData</span>></span>
    7. <span class="hljs-constant">IOModemSerialStreamSync</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IOModemSerialStreamSync</span>></span>
    8. <span class="hljs-constant">IOSerialBSDClient</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IOSerialBSDClient</span>></span>
    9. <span class="hljs-constant">IOUSBDeviceUserClientV2</span> <<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IOUSBDeviceUserClientV2</span>></span>




    Aber leider lässt sich dieser bei mir nicht kompilieren. Und das nur aus dem Code rauszulesen bin ich irgendwie zu doof?!
    Wie komme ich also an den richtigen Namen?
    --
    Wer ist dieser Root und warum gehören ihm alle meine Dateien??

    SIDplay5 for macOS on GitHub