Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 用于usb存储设备的无代码kext_Macos_Storage_Libusb_Iokit_Kernel Extension - Fatal编程技术网

Macos 用于usb存储设备的无代码kext

Macos 用于usb存储设备的无代码kext,macos,storage,libusb,iokit,kernel-extension,Macos,Storage,Libusb,Iokit,Kernel Extension,在一个项目中,我最近试图通过osx 10.9.5上的libusb访问usb存储设备。但很明显,一些默认的驱动程序声称该设备,我无法访问它。当我尝试通过libusb访问它时,它返回“权限不足” 当我在Ubuntu中执行(java)应用程序时,一切都正常工作 我在互联网上的研究表明,提供一个无代码的kext,在更高的probescore上匹配该设备,可以防止默认驱动程序声明该设备。这将完全解决这个问题,因为卸载IOUSBMassStorage kext使我们能够使用该设备执行所需的操作 我尝试创建一

在一个项目中,我最近试图通过osx 10.9.5上的libusb访问usb存储设备。但很明显,一些默认的驱动程序声称该设备,我无法访问它。当我尝试通过libusb访问它时,它返回“权限不足”

当我在Ubuntu中执行(java)应用程序时,一切都正常工作

我在互联网上的研究表明,提供一个无代码的kext,在更高的probescore上匹配该设备,可以防止默认驱动程序声明该设备。这将完全解决这个问题,因为卸载IOUSBMassStorage kext使我们能够使用该设备执行所需的操作

我尝试创建一个无代码的kext并没有像我希望的那样成功,因为它似乎既不会在启动时加载,也不会在我使用
kextload
时加载。至少我是这么想的,因为我无法卸下它,也无法在列出的任何地方找到它

my Info.plist的最新版本如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>OSBundleLibraries</key>
    <dict/>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleGetInfoString</key>
    <string>Test USB Stick</string>
    <key>CFBundleIdentifier</key>
    <string>de.mischok.testkext</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>Test USB Device</string>
    <key>CFBundlePackageType</key>
    <string>KEXT</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1.0.0</string>
    <key>IOKitPersonalities</key>
    <dict>
        <key>Device Driver</key>
        <dict>
            <key>CFBundleIdentifier</key>
            <string>de.mischok.testkext</string>
            <key>IOClass</key>
            <string>IOUSBUserClientInit</string>
            <key>IOProviderClass</key>
            <string>IOUSBDevice</string>
            <key>idProduct</key>
            <integer>357</integer>
            <key>idVendor</key>
            <integer>4871</integer>
            <key>bcdDevice</key>
            <integer>4352</integer>
            <key>bConfigurationValue</key>
            <integer>1</integer>
            <key>bInterfaceNumber</key>
            <integer>0</integer>
        </dict>
        <key>Interface Driver</key>
        <dict>
            <key>CFBundleIdentifier</key>
            <string>de.mischok.testkext</string>
            <key>IOClass</key>
            <string>IOUSBUserClientInit</string>
            <key>IOProviderClass</key>
            <string>IOUSBInterface</string>
            <key>idProduct</key>
            <integer>357</integer>
            <key>idVendor</key>
            <integer>4871</integer>
            <key>bcdDevice</key>
            <integer>4352</integer>
            <key>bConfigurationValue</key>
            <integer>1</integer>
            <key>bInterfaceNumber</key>
            <integer>0</integer>
        </dict>
    </dict>
    <key>OSBundleRequired</key>
     <string>Local-Root</string>
</dict>
</plist>
正如它所说的kext应该是可加载的,我认为它应该可以工作。但是,当使用
sudo-kextload/path/to/my.kext
加载kext时,system.log会记录这一点,而不是工作:

Nov  5 12:28:58 users-MacBook-Pro.local sudo[528]: user : TTY=ttys000 ; PWD=/Users/user ; USER=root ; COMMAND=/sbin/kextload /Users/user/Desktop/testv1-0.kext
Nov  5 12:28:58 users-MacBook-Pro.local com.apple.kextd[12]: WARNING - Invalid signature -67062 0xFFFFFFFFFFFEFA0A for kext "/Users/user/Desktop/testv1-0.kext"
由于这只是一个警告,我认为它已成功加载。但一旦我插入设备,usb prober输出如下所示:

Nov  5 12:57:11.911  [6]    Device Descriptor Dump
Nov  5 12:57:11.911  [6]        bLength 18
Nov  5 12:57:11.911  [6]        bDescriptorType 1
Nov  5 12:57:11.911  [6]        bcdUSB 768 (0x0300)
Nov  5 12:57:11.911  [6]        bDeviceClass 0
Nov  5 12:57:11.911  [6]        bDeviceSubClass 0
Nov  5 12:57:11.911  [6]        bDeviceProtocol 0
Nov  5 12:57:11.911  [6]        bMaxPacketSize0 9
Nov  5 12:57:11.911  [6]        idVendor 4871 (0x1307)
Nov  5 12:57:11.911  [6]        idProduct 357 (0x0165)
Nov  5 12:57:11.911  [6]        bcdDevice 4352 (0x1100)
Nov  5 12:57:11.911  [6]        iManufacturer 1 
Nov  5 12:57:11.911  [6]        iProduct 2 
Nov  5 12:57:11.911  [6]        iSerialNumber 3
Nov  5 12:57:11.911  [6]        bNumConfigurations 1
Nov  5 12:57:11.916  [5]    Finding device driver for DEVICE, matching personality using com.apple.iokit.IOUSBUserClient, score: 106999, wildCard = 3
Nov  5 12:57:11.916  [6]        Matched: idVendor (4871) idProduct (357) bcdDevice (4352) 
Nov  5 12:57:11.916  [6]        Didn't Match: nothing
Nov  5 12:57:11.917  [5]    Finding device driver for DEVICE, matching personality using com.apple.driver.AppleUSBComposite, score: 50000, wildCard = 0
Nov  5 12:57:11.917  [6]        Matched: bDeviceClass (0) bDeviceSubClass (0) 
Nov  5 12:57:11.917  [6]        Didn't Match: nothing
Nov  5 12:57:11.918  [5]    Finding device driver for DEVICE, matching personality using com.apple.driver.AppleUSBCDC, score: 60000, wildCard = 0
Nov  5 12:57:11.918  [6]        Matched: bDeviceClass (0) bDeviceSubClass (0) bDeviceProtocol (0) 
Nov  5 12:57:11.918  [6]        Didn't Match: nothing
这些是唯一的人格匹配发生,所以我想知道,我应该做什么,使我的kext匹配我的设备,甚至负载

  • 使用
    kextutil
    ,而不是
    kextload
    。它提供了更好的诊断
  • 指定IOClass为
    IOUSBUserClient
    的I/O Kit个性必须指定
    com.apple.iokit.IOUSBUserClient
    CbundleIdentifier
    ,因为该类就位于此
  • 要加载未签名的kext,它必须位于10.9.x上的
    /System/Library/Extensions

  • 非常感谢你!这对我帮助很大,尽管我不再使用
    ioubuserclientinit
    ,因为我的设备是一个存储设备。你的答案仍然100%正确。
    Nov  5 12:57:11.911  [6]    Device Descriptor Dump
    Nov  5 12:57:11.911  [6]        bLength 18
    Nov  5 12:57:11.911  [6]        bDescriptorType 1
    Nov  5 12:57:11.911  [6]        bcdUSB 768 (0x0300)
    Nov  5 12:57:11.911  [6]        bDeviceClass 0
    Nov  5 12:57:11.911  [6]        bDeviceSubClass 0
    Nov  5 12:57:11.911  [6]        bDeviceProtocol 0
    Nov  5 12:57:11.911  [6]        bMaxPacketSize0 9
    Nov  5 12:57:11.911  [6]        idVendor 4871 (0x1307)
    Nov  5 12:57:11.911  [6]        idProduct 357 (0x0165)
    Nov  5 12:57:11.911  [6]        bcdDevice 4352 (0x1100)
    Nov  5 12:57:11.911  [6]        iManufacturer 1 
    Nov  5 12:57:11.911  [6]        iProduct 2 
    Nov  5 12:57:11.911  [6]        iSerialNumber 3
    Nov  5 12:57:11.911  [6]        bNumConfigurations 1
    Nov  5 12:57:11.916  [5]    Finding device driver for DEVICE, matching personality using com.apple.iokit.IOUSBUserClient, score: 106999, wildCard = 3
    Nov  5 12:57:11.916  [6]        Matched: idVendor (4871) idProduct (357) bcdDevice (4352) 
    Nov  5 12:57:11.916  [6]        Didn't Match: nothing
    Nov  5 12:57:11.917  [5]    Finding device driver for DEVICE, matching personality using com.apple.driver.AppleUSBComposite, score: 50000, wildCard = 0
    Nov  5 12:57:11.917  [6]        Matched: bDeviceClass (0) bDeviceSubClass (0) 
    Nov  5 12:57:11.917  [6]        Didn't Match: nothing
    Nov  5 12:57:11.918  [5]    Finding device driver for DEVICE, matching personality using com.apple.driver.AppleUSBCDC, score: 60000, wildCard = 0
    Nov  5 12:57:11.918  [6]        Matched: bDeviceClass (0) bDeviceSubClass (0) bDeviceProtocol (0) 
    Nov  5 12:57:11.918  [6]        Didn't Match: nothing