2015-02-19 6 views
3

Существуют программы, которые восстанавливают удаленные файлы с жесткого диска, а также те, которые перезаписывают свободное пространство, чтобы предотвратить восстановление удаленных файлов.Жесткий диск читает и записывает без создания файла

Акт перезаписи свободного пространства кажется понятным. Программа создает файлы и записывает в них произвольные байты.

Однако, когда дело доходит до чтения удаленных файлов, я в тупике. Я понимаю, что удаление файла только избавляет от ссылки в файловой системе и что программы восстановления ищут обычные заголовки файлов, чтобы определить, какая часть «свободного пространства» может быть восстановимым файлом.

Но Как программа может считывать данные с жесткого диска, который не является частью файловой системы? Любой язык, на котором я использовал или читал некоторую документацию, позволяет читать с жесткого диска только путем открытия файла, который не является свободным местом.

Я также был бы благодарен за небольшой пример чтения с жесткого диска, возможно, на C++, Java или Python.

Кроме того, я пользователь Windows.

EDIT: Это то, что Java ребята придумали: How to access specific raw data on disk from java

+1

Этот вопрос читается как не по теме; здесь не существует реальной проблемы формального кодирования, которая должна быть решена. Извините, мы не можем ссылаться на ресурсы вне темы. – Makoto

+2

Я все о том, чтобы поставить вопросы как слишком широкие, но я не согласен - он немного широк, но я все еще думаю, что это законный вопрос на чуть более высоком уровне. Обычно вопросы, которые требуют примера на любом языке, были бы полностью вне темы, но это более концептуальный вопрос, требующий очень конкретного ответа, поэтому я думаю, что это достаточно разумно. – neminem

+0

То, о чем я прошу, может быть сделано или не может. Если это так, то должна быть какая-то последовательность программных заявлений, которые могут ее достичь. Я думаю, что найти эту последовательность утверждений является формальной проблемой кодирования. – Dziugas

ответ

4

Каждый ОС там есть понятие block device - с жестким диском является каноническим примером. Теперь красота заключается в том, что в большинстве реализаций (включая Windows) их можно открыть так же, как если бы они были файлами в файловой системе, ссылаясь на специальные имена файлов, которые были бы недопустимыми внутри файловой системы (соответствующие пользовательские привилегии предполагаются).

В Windows, например. открытие \\?\Device\Harddisk0\Partition1 даст вам доступ к первому разделу первого жесткого диска. Имея доступ для чтения к этому специальному «файлу», вы можете теперь читать содержимое диска, не проходя через файловую систему, предоставляя вам возможность обнаруживать и спасать объекты, которые больше не являются частью файловой системы, но еще не были перезаписаны или обрезать.

+0

Я должен заменить знак вопроса чем-нибудь? – Dziugas

+2

@ Dziugas - нет, вы не! Префикс '\\? \' Заставляет ядро ​​ОС искать имя не в файловой системе, а в объектах ядра. –

+0

Windows, кажется, интерпретирует это как попытку найти другую машину в сети. – Dziugas

Смежные вопросы