如何在内核扩展中获取USB设备的供应商和产品ID?

时间:2018-02-22 07:06:17

标签: macos usb device-driver iokit kernel-extension

我正在为大型存储设备连接到机器时加载mac os的内核扩展。

我为plist文件创建工作正常,它在大容量存储设备连接到机器时加载内核扩展但我想找到特定目的的连接设备供应商ID和产品ID请帮助..

1 个答案:

答案 0 :(得分:0)

加载特定VID / PID组合的kext

如果您希望仅为设备加载某个VID ​​/ PID组合的kext,则应扩展您的IOKit个性词典。 Apple在QA1076中记录了USB设备/接口的完整规则,但实际上,您需要将idVendoridProduct的整数属性添加到Info.plist中的个性:

<key>idVendor</key>
<integer>1234</integer>
<key>idProduct</key>
<integer>5678</key>

请注意,您需要将ID从十六进制转换为十进制。

如果您需要支持多个产品ID,则可以使用idProductArray代替idProduct。此属性的值是一个包含整数的数组。

以编程方式

访问供应商/产品ID

如果您需要VID / PID信息以某种方式影响您的代码流,您可以直接在设备或接口对象上查询idVendor / idProduct属性。例如,假设您要在驱动程序实例的start()函数中执行此操作:

bool MyKext::start(IOService* provider)
{
    // …
    // call to superclass's start(), etc.
    // …

    // Fetch vendor ID:
    OSNumber* vid_num = OSDynamicCast(OSNumber, provider->getProperty(kUSBVendorID));
    if (vid_num != nullptr)
    {
        uint32_t vid = vid_num->unsigned32BitValue();
        // use vid here
    }
    // …
}

您可以类似地将kUSBVendorID替换为kUSBProductId来查询产品ID。