Как перезаписать части внутреннего буфера DriverKit OSData?
Документация OSData
говорит, что "... Вы можете добавлять к ним байты и перезаписывать части байтового массива".. Я вижу способ добавления байтов, но не понимаю, как я могу перезаписать часть буфера.
Другой вариант - использовать IONewZero
выделить ряд элементов нужного мне типа. В моем случае это просто нужно дляint
с.
Пример:
T* dataBuffer = IONewZero(T, SIZE);
А затем освободите место с помощью:
IOSafeDeleteNULL(dataBuffer_, T, SIZE);
Каковы преимущества использования OSData
объект по сравнению с решением с IONewZero
/ IOSafeDeleteNULL
?
1 ответ
Я думаю, что документацию можно просто скопировать из варианта ядра OSData
. Я видел это во многих местах, особенно в USBDriverKit.
OSData
в основном полезен для работы с plist-подобными структурами данных (т. е. для установки и получения свойств объектов службы) в сочетании с другими типами OSTypes: OSArray
, OSDictionary
, OSNumber
и т. д. Он также используется для внутриполосных (<= 4096 байт) аргументов "структуры" внешних методов пользователя-клиента.
Единственное использование, которое я вижу за пределами этих сценариев, - это когда вам абсолютно необходимо подсчитать количество ссылок на большой объем данных. Но это, конечно, не особенно удобный или эффективный контейнер для незавершенных данных. Если впоследствии вам потребуется отправить данные на устройство или сопоставить их с пользовательским пространством,IOBufferMemoryDescriptor
вероятно, лучший выбор (а также учитывается количество ссылок), хотя он еще более тяжелый.