То, что вы описываете, представляет собой по сути то же самое зло, которое заражает несколько API-интерфейсов Windows, которым требуется непредсказуемый объем памяти. Практика состоит в том, чтобы вызывать их без буфера для размещения их работы, они все равно выполняют эту работу, не сохраняя результаты, но подсчитывая количество байтов, которое им потребуется на этом пути. Затем вы выделяете буфер такого размера и снова вызываете функцию с буфером, зная размер.
Это неописуемо зло. Это компьютерное программирование, эквивалентное разложившейся бюрократии, где каждый отдел требует от вас заполнить форму, содержащую большую часть той же информации, что и та, которую вы дали предыдущему отделу, но поскольку в каждой форме есть некоторая разная информация, они не просто возьмут копию формы, которую вы дали другим парням. Ptui!
Время программиста дорого, процессорное время дешево. Требуя от программистов писать один и тот же вызов API N раз, чтобы выяснить какое-то мировое состояние, в котором сам API мог бы работать самостоятельно, пытаясь перевернуть это с ног на голову.
Таким образом, рекомендуется, чтобы драйвер делал все возможное, чтобы обеспечить успешное выполнение write (). Если можно заранее предсказать, что это не удастся, проверив некоторое состояние мира, возможно, это должен быть ioctl ().