Цель - что бы при наличии BAD блоков

Цель - что бы при наличии BAD блоков на HDD он на них не затыкался , а читал длинным чтением независимо от того повреждён сектор или нет.
Вот кое какая информация на эту тему:

Ошибка чтения сектора

Собственно, маловероятно, что бы сектор был разрушен целиком. Чаще всего "сыплется" только какая-то его часть, а все остальные данные остаются неискаженными.


Существуют контроллеры двух типов. Первые, обнаружив расхождение контрольной суммы считанного сектора, все же оставляют прочиненные данные в буфере, и позволяют их извлечь оттуда, проигнорировав ошибку чтения. Вторые либо очищают буфер, либо просто не сбрасывают внутренний кэш в результате чего все равно прочитать буфер невозможно. На практике обычно встречаются последнее. При этом сброс кеша можно инициировать серией запросов без считывания полученных данных. Кеш при этом переполняется, и наиболее старые данные будут вытолкнуты в буфер. Остается их только прочесть. Конечно, это крайне медленно, но, к сожалению, универсальной команды сброса кеша не существует. Разные разработчики реализуют это по-своему (впрочем, иногда это можно найти в документации на чипы, используемые в контролере). Westerd Digitel сообщает в техническом руководстве, что при длинном чтении сектора без повтора, контроль сектора не выполняется, и он будет-таки целиком помещен в буфер. Кстати, так и должно быть по стандарту. Увы, остальные фирмы он него часто отклоняются по разным соображениям.

Остается определить какие же из прочитанных данных достоверные, а какие нет (если этого не видно "визуально" - например, в случае текстового или графического файлов)? Разумеется, в подобных рамках задача кажется неразрешимой, но это не совсем так. Дело в том, что можно произвести не только короткое, но и длинное чтение (0х22h req PIOin read long with retry) для чего можно использовать следующую процедуру:
MOV AH,0Ah ; Длинное чтение сектора с CRC
MOV AL,NumSect ; Число секторов для чтения
MOV CH,Cyl ; Цилиндр (младшие восемь байт)
MOV CL,Sect ; Число секторов
MOV DH,HEad ; Головка
MOV DL,80 ; HDD #0
LES BX,[lpBuff] ; Указатель на буфер

Вобщем смысл в том что бы попробовать сделать такую штуку через БИОС...
Реально?