我正在编写Mac OS的内核扩展程序,以便在将质量存储设备连接到机器上。
i为PLIST文件创建完美工作,当质量存储设备连接到机器时,它会加载内核扩展,但我想找出连接的设备供应商ID和产品ID的特定目的,请提供帮助。
为某些vid/pid组合加载kext
如果您只想将kext装载到设备中,则应使用特定的vid/pid组合,则应扩展iokit个性词典。Apple在QA1076中记录了USB设备/接口的完整规则,但是从本质上讲,您需要将idVendor
的整数属性和idProduct
添加到您的info.plist中的个性。plist:
<key>idVendor</key>
<integer>1234</integer>
<key>idProduct</key>
<integer>5678</key>
请注意,您需要将ID从十六进制转换为十进制。
如果您需要支持多个产品ID,则可以使用idProductArray
而不是idProduct
。该属性的值是包含整数的数组。
在kext
中以编程方式访问供应商/产品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
}
// …
}
您可以类似地用kUSBProductId
替换kUSBVendorID
来查询产品ID。