В настоящее время 58 и 70 сис. функции выполняют схожие функции. 58 сис. функция досталась нам от MENUET. Сейчас, все новые программы используют 70 сис. функцию.
Предлагаю удалить 58 сис. функцию, и больше не оборачиваться на совместимость. Программы, у которых есть исходники, и они присутствуют на SVN будут переписаны на 70 сис. функцию.
Для информации: среди подфункций 58-й функции есть LBA-чтение с IDE-дисков 58.16, у которого отсутствует аналог в 70-й функции и которое используется программой hdread, исходники которой отсутствуют.
ЗЫ на всякий случай: лично мне пофиг на судьбу 58-й функции в целом и приложения hdread в частности, так и голосовал.
Можно добавить такую-же подфункцию в функцию 70 если есть необходимость, так что я тоже проголосовал за третий вариант. Главное код работы с LBA не удалять.
Прямой доступ к диску из пользовательского приложения - одна из опасных дыр в системной защите. Когда-нибудь эту дырку придется так или иначе затыкать.
ИМХО имеет смысл сохранить LBA-сервис как опциональную подфункцию SysFn 70 для экспериментальных и встроенных версий ядра, отключив ее (условно-компилируемым блоком) в транке. Кому надо - тот легко сможет подключить ее для собственных нужд.
А сделать так, чтобы функции 58 и 70 были совместимы между собой, а может быть просто были синонимами (в смысле подфункций) нельзя?
P.S.
Цитата: "Прямой доступ к диску из пользовательского приложения - одна из опасных дыр в системной защите."
Если развивать систему в микроядерном направлении, то можно идти другим путём - проверять полномочия приложения выполнять тот или иной системный вызов (в смысле - из потенциально опасных).
А сделать так, чтобы функции 58 и 70 были совместимы между собой, а может быть просто были синонимами (в смысле подфункций) нельзя?
Нельзя. Они не только отличаются номером функций подфункций. По сравнению с 70 функцией 58 вообще косорукий и одноногий инвалид. В 70 функции есть аналог VFS, 58 вообще не умеет возвращать директории в виде форматированного списка - она тупо возвращает содержимое либо файла либо папки в виде RAW данных. При работе с ней приложению (файловому менеджеру к примеру) приходилось самому разбираться со всей хитрой внутренней структурой каталогов FAT, про NTFS и Ext вообще речи не было на общесистемном уровне.
Если развивать систему в микроядерном направлении, то можно идти другим путём - проверять полномочия приложения выполнять тот или иной системный вызов (в смысле - из потенциально опасных).
К микроядерности это никакого отношения не имеет. В целом ряде древних систем с монолитным ядром системные вызовы делились на привилегированные и непривилегированные; первые были доступны ограниченному кругу задач (например, привилегированная задача могла убить любую задачу в системе, а непривилегированная -- только любую задачу своего же пользователя).
Прямой доступ к диску из пользовательского приложения - одна из опасных дыр в системной защите.
и я бы оставил эту возможность только драйверам, сделав экспорт соответствующих функций ядра.
Можно сделать условную компиляцию. Правда этот вопрос надо еще проработать.
Quote:
Да и 58.12 вроде бы использует приложение hdview замечательного товарища Trans'а. Приложение не имеет исходников. Кто-нибудь может с ним связаться?
Связаться вряд ли, но при желании можно переписать с нуля - ничего в ней сложного нет (учитывая наличие Box_Lib сейчас), только времени на все не хватает.
syscall_LBA_read_write: cmp [lba_read_enabled], 1 je @f mov eax, 10 ; LBA access denied ret @@:
test edi, edi jnz @f mov eax, 7 ; No pointer to buffer ret @@: test esi, esi jnz @f .err_dev_name: mov eax, 1 ; No pointer to device name ret @@: movzx eax, byte [esi+4] sub al, '0' inc al cmp dword [esi], '/hd/' je @f
cmp dword [esi], '/bd/' jne .err_dev_name dec al add al, 0x80 @@: mov [hdpos], eax
push ebx edi mov eax, ecx xchg ebx, edi test edi, edi jz .read cmp edi, 1 je .write
pop edi ebx mov eax, 2 ; Unknown function ret
.read: call hd_read jmp .out
.write: call hd_write .out: pop edi ebx xor eax, eax cmp [hd_error], 0 je @f mov eax, 11 ; Device error @@: ret
в syscall.inc добавил:
Code:
dd syscall_LBA_read_write ; 59-LBA read and write
Attachment:
File comment: Собранное ядро с сис. функцией 59 KERNEL.MNT.txt [73.04 KiB]
Downloaded 212 times
Файл kernel.mnt.txt надо переименовать в kernel.mnt, форум блокирует "неизвестные" ему расширения.
Формат функции 59.
Программа считывающая MBR (винчестера или флешки) и опционально записывающая загрузочный сектор указанного устройства в файл /sys/bootsector.bin. Путь к устройству для считывания MBR зашито в коде программы (для смены устройства нужна перекомпиляция программы).
Attachment:
File comment: MBR reader MBR_Reader.7z [9.89 KiB]
Downloaded 218 times
P.S. Я по прежнему считаю, что этой функции быть не должно в "нормальном" ядре.
Я за то, чтобы такая функция была в официально в ядре. Всё равно нету никакого ограничения доступа. Может просто добавить функцию включения/выключения возможности прямого доступа к диску?
Зачем функцию? Можно сделать компиляцию по умолчанию без этой функции, а при необходимости компилировать с функцией.
Quote:
Всё равно нету никакого ограничения доступа.
Неверное размышление. Выражаясь иносказательно - если всем разрешено носить личное оружие это не значит, что любому должна быть доступна атомная бомба. А такая функция по умолчанию - это атомная бомба для данных жесткого диска.
Users browsing this forum: No registered users and 3 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum