Как перезаписать части внутреннего буфера DriverKit OSData? - PullRequest
1 голос
/ 28 мая 2020

В документации OSData говорится, что «... Вы можете добавлять к ним байты и перезаписывать части массива байтов». . Я вижу способ добавления байтов, но я не понимаю, как я могу перезаписать часть буфера.

Другой вариант - использовать IONewZero для выделения ряд элементов нужного мне типа. В моем случае это просто нужно для int s.

Пример:

T* dataBuffer = IONewZero(T, SIZE);

А затем освободить с помощью:

IOSafeDeleteNULL(dataBuffer_, T, SIZE);

Каковы преимущества использования объект OSData по сравнению с решением с IONewZero / IOSafeDeleteNULL?

1 Ответ

1 голос
/ 28 мая 2020

Я думаю, что документацию можно просто скопировать из варианта ядра OSData. Я видел это во множестве мест, особенно USBDriverKit.

OSData в основном полезен для работы с plist-подобными структурами данных (например, установка и получение свойств для служебных объектов) в сочетании с другими типами OSTypes : OSArray, OSDictionary, OSNumber и т.д. c. Он также используется для внутриполосных (<= 4096 байт) аргументов "struct" внешних методов клиента-пользователя. подсчитайте большой объем данных. Но это, конечно, не особенно удобный или эффективный контейнер для незавершенных данных. Если впоследствии вам потребуется отправить данные на устройство или сопоставить их с пользовательским пространством, вероятно, лучшим выбором будет <code>IOBufferMemoryDescriptor (а также с учетом количества ссылок), хотя он еще более тяжелый.

...