Невозможна. Если очень хочется, то такую возможность можно добавить в ядро в отдельно взятой конфигурации, это следующие строчки:
fs/fs_lfn.inc, массив fs_HdServices: добавить в конец массива (непосредственно перед "fs_NumHdServices equ ...")
Code: Select all
dd fs_HdDirectRead
dd fs_HdDirectWrite
И в любой из файлов ядра включить код типа
Code: Select all
fs_HdDirectRead:
mov eax, [ebx]
mov ebx, edx
call hd_read
xor eax, eax
cmp [hd_error], eax
jz @f
mov al, 11 ; device error
@@:
ret
и аналогичный для fs_HdDirectWrite с единственной заменой hd_read на hd_write, то появятся две новые системные функции, 70.10 и 70.11 для соответственно прямого чтения с раздела диска и прямой записи на раздел диска: eax = 70, ebx -> структура fileinfo, содержимое структуры:
Code: Select all
dd номер подфункции (10 или 11)
dd номер сектора (0 = первый сектор раздела)
dd игнорируется
dd игнорируется (здесь мог бы быть размер)
dd указатель на буфер для данных или буфер с данными
n*db ASCIIZ-строка либо db 0 / dd указатель на ASCIIZ-строку с указанием имени устройства (/hdX/Y либо /bdX/Y)
Можно ввести дополнительно число секторов для чтения - поле, помеченное "здесь мог бы быть размер", передаётся в fs_HdDirectRead/fs_HdDirectWrite в регистре ecx и можно добавить соответствующий код (мне лень).
Не включено таких возможностей в стандартное ядро, потому что не стоит кому попало давать возможности по прямому доступу к диску. Но для разработки и тестирования на отдельно взятом компе - нормально.
P.S. Номера 10 и 11 - это в текущем ядре, где существуют функции от 0 до 9. Если (или, скорее, когда) добавятся ещё функции, то при таком добавлении номера соответственно сдвинутся вверх.