Основная проблема в проводнике Windows заключается в том, что он не поддерживает возобновление копирования после ошибки чтения. Например, большинство поверхностно поцарапанных компакт-дисков будут выходить из строя на разных участках диска каждый раз, когда вы извлекаете и вставляете их заново.
Следовательно, с помощью утилиты, поддерживающей возобновление операций копирования, можно прочитать все содержимое поврежденного компакт-диска, выполнив несколько раз команду «извлечь / перезагрузить / возобновить».
На самом деле, это то, что делает утилита , которую я написал , и мне никогда не требовалось что-либо более умное для чтения поцарапанных дисков. (Он просто использует ReadFile и WriteFile.)
Еще одним шагом будет открытие необработанного раздела (т. Е. Образа диска) путем передачи строки, такой как "\. \ F:" (примечание: косые черты здесь буквальны) в CreateFile. Это позволит вам читать сырые сектора с диска, но восстановить файлы по этим данным будет сложно.
Фактически, синтаксис "\. \" Позволяет открывать устройства в "\ GLOBAL ??" ветвь пространства имен диспетчера объектов Windows, как если бы они были файлами. Это мало чем отличается от вызова dd с параметром / dev / x. Существует также ветка «\ Device», но она доступна только через DeviceIoControl () (т.е. ioctl ()), то есть нет простого интерфейса ReadFile () / WriteFile ().
Думаю, что-нибудь более низкое, чем это, будет зависеть от устройства; как чтение необработанных данных с CD-ROM (включая биты ECC), как это делают некоторые программы для записи CD. Вам нужно будет провести некоторые исследования на конкретных носителях (CD, flash, DVD) и на том, что ваше оборудование позволяет вам делать на них.
Примечание: обратная косая черта, похоже, теряется на пути к веб-странице; вам нужно передать "DeviceName устройства с обратной косой чертой с обратной косой чертой" в CreateFile. Тебе тоже, конечно, нужно бежать от них.