如何覆盖 DriverKit OSData 内部缓冲区的一部分?

How to overwrite portions of a DriverKit OSData internal buffer?

OSData says that "...You can add bytes to them and overwrite portions of the byte array.". I can see a method to append 字节的文档,但我不明白我是如何覆盖一部分缓冲区的。

另一种选择是使用 IONewZero 分配我需要的类型的多个元素。我的情况是 ints.

示例:

T* dataBuffer = IONewZero(T, SIZE);

然后解除分配:

IOSafeDeleteNULL(dataBuffer_, T, SIZE);

与使用 IONewZero / IOSafeDeleteNULL 的解决方案相比,使用 OSData 对象有什么优势?

我认为文档可能只是从 OSData 的内核变体中复制粘贴而来。我在很多地方都看到过,尤其是 USBDriverKit。

OSData 与其他操作系统类型一起处理 plist 类数据结构(即设置和获取服务对象的属性)最有用:OSArrayOSDictionaryOSNumber,等等。它也用于带内(<= 4096 字节)"struct" 用户客户端外部方法的参数。

除了这些场景之外,我能看到的唯一用途是当您绝对必须对数据块进行引用计数时。但它肯定不是处理中数据的特别方便或有效的容器。如果您随后需要将数据发送到设备或将其映射到用户 space,IOBufferMemoryDescriptor 可能是更好的选择(并且还包括引用计数),尽管它更重量级。