YanMinsk |
Отправлено: 13.09.2004, 16:25 |
|
Не зарегистрирован
|
DeleteFile насколько я понял удаляет файл, а как удалить файл, да еще и его заголовок в FAT. |
|
Guest |
Отправлено: 13.09.2004, 16:47 |
|
Не зарегистрирован
|
А почему это вас беспокоит ?
DeleteFile удаляет описание из списка заголовков (так назывемом Directory) и помечает кластеры как не используемые в File Allocation Tatble (таблице распределения кластеров) (в обоих копиях). Так что можете не переживать — просто вызывайте DeleteFile. |
|
Konstantine |
Отправлено: 13.09.2004, 17:10 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
и даже не так!!! при удалении, в имени файла в каталоге первый символ заменяется на определённый (вроде-бы 0E5h)... и так и существует в каталоге.
FAT — это таблица чисел (номеров кластеров), которая хранит номер след.кластера в цепочке. При обычном удалении эта цепочка не меняется. Меняется только ссылка на файл в каталоге.
Для физического удаления файл надо переписать. напр. нулями. причём объёмом не еньшим чем исхдный файл.
Для того чтоб гарантированно убрать запись из каталога каталог надо пересоздать. или переименовать файл и его удалить.
FAT — не содержит никаких заголовков. Если что не понял — объясни конкретнее суть проблемы, и может быть поможем.
|
|
YanMinsk |
Отправлено: 14.09.2004, 15:03 |
|
Не зарегистрирован
|
Смысл в том (как я понимаю) в FAT хранится название файла, цепочка кластеров и т.д. Так вот есть файл- его надо удалить так чтобы его нельзя было восстановить разными утилями и вообще продвинутый user не смог определить что етот файл был. Для решения первой задачи этот файл несколько раз забиваем нулями/ еденицами/бредом, а вот как в FATе все о нем удалить??? |
|
Guest |
Отправлено: 14.09.2004, 15:15 |
|
Не зарегистрирован
|
Воспользоваться коммерческим утилитом. Например из поставки нортона. |
|
Konstantine |
Отправлено: 14.09.2004, 15:37 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
QUOTE (YanMinsk @ 14/09/2004, 16:05) | Смысл в том (как я понимаю) в FAT хранится название файла, цепочка кластеров и т.д.
...
а вот как в FATе все о нем удалить??? |
FAT не хранит этих данных. Это хранит каталог... и не спорь. это так!!!
Даже если так. каким тебе нада подходом? чтоб ТЫ это сделал? или твоя программа без участия тебя?
Если достаточно того чтоб ТЫ удалил — пользуйся после удаления дефрагментацией. или утилями разными, имеющие низкий уровень. чем ниже — тем лучше.
Если программно — то это очень опасная штука — можно враз вообще всё повалить... и тут без прямого доступа к железу не обойтися... нада хотя-бы считывание-запись по секторам (кластерам) и полное знание устройства файловой системы (тут с NTFS посложнее).
напиши ещё конкретнее подход. программный или пользовательский?
|
|
Хлор |
Отправлено: 14.09.2004, 18:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 78
|
File Shredder — Программа для безвозвратного затирания файлов.
|
|
YanMinsk |
Отправлено: 14.09.2004, 21:02 |
|
Не зарегистрирован
|
Именно програмно, и без использования вского рода утилит. А насчет того , что хранится в FAT пусть будет так как Вы все говорите (мне в принципе все равно), главное — как мне это удалить?????? |
|
YanMinsk |
Отправлено: 14.09.2004, 21:09 |
|
Не зарегистрирован
|
И еще если Вы говорите, что это опасно и сложно, то как действуют эти самые пресловутые утилиты??? Или задам вопрос по другому: — Как сделать так, чтобы о файле, который я удалил, ничего не было известно тем же самым утилитам по восстановлению данных(типа Norton, EasyRecovery и т.д.) |
|
Konstantine |
Отправлено: 15.09.2004, 09:09 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
даа это самое худшее что Я ожидал. надеюсь хоть система (здесь и далее — файловая система) — FAT.
Теперь: это надо делать под win? или можно под DOS? т.к. под ВИН-ом боюсь сложно будет получить прямой доступ к диску...
дальше буду рассказывать подробно но без примеров кода, т.к. сам этого не писАл и не пробовал, но теоретически это знаю. Все испытания рекомендую проводить на RAM диске, желательно имеющем систему FAT32. или на жестком диске (разделе) не имеющем ценной информации. Таже можно проводить отладку и испытания на Virtual PC — это будет ещё безопаснее.
теперь о системе, для удаления (безвозратного) надо:
1) найти соотв. запись в каталогах. для этого надо осуществуть поиск по каталогам, известно что:
а) номер кластера с которого начинается корневой каталог можно получить из BR (boot record — загрузочная запись — первый сектор раздела)
б) в каталоге ищем запись с именем следующего каталога, и переходим в след. каталог (№ кластера указан в структуре записи) — так повторять пока не дойдём до файла. — здесь проблема — каталог может быть фрагментирован — т.е. каталог может располагаться не в одном кластере и не в подряд идущем. Номер след. кластера можно получить из FAT.
в) в каталоге с файлом аналогично находим кластер с которого начинается файл.
2) пройдя по всей цепочке в таблице FAT обнулить все её значения в цепочке. (каждый элемент таблицы содержит номер (индекс) след. элемента в цепочке, конец цепочки — значение от -1 до -8 в hex виде)). тут эе можно обнулять информацию в кластерах с данными. Также нужно учесть что таблиц может быть не одна и не две... их количество записано в BR
3) вернутся к каталогу. Все записи которые следуют дальше текущей, сместить на 1 ранее (нельзя просто обнулить запись) — и текущая запись перепишется.
ну вот основные принципы и стратегия.
Теперь остаётся под вопросом проблемы:
1) чтение произвольного кластера раздела диска
2) запись в произвольный кластер раздела диска
3) уверенность в том что на диске отсутствуют логические ошибки.
Если решишь эти проблемы — то Я тебе помогу далее с реализацией. токо пообещай, что если получится — поделишься исходниками.
|
|
Konstantine |
Отправлено: 15.09.2004, 09:22 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
P.S.: Для NTFS я не знаю...
|
|
Guest |
Отправлено: 15.09.2004, 10:05 |
|
Не зарегистрирован
|
Открываете файл
Узнаете его размер
Становитесь на начало
Записываете размер_файла байт со значением, например, FF
Закрываете
Переименовываете файл во что то не важное
Удаляете
Все
И, ради бога, не лазьте по FAT. На FAT32 нули в цепочке проставит DeleteFile. А если это не FAT то последствия непредсказуемые.
Кстати, Win даст вам по рукам при попытке залезть в FAT следовательно работать придется только под DOS (не эмуляция а именно стартовая загрузка). |
|
Konstantine |
Отправлено: 15.09.2004, 10:53 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
фат сразу не обнуляется (но неуверен), но тут проблема в том, что вообще скрыть запись из каталога!!!
|
|
Guest |
Отправлено: 15.09.2004, 11:09 |
|
Не зарегистрирован
|
QUOTE | проблема в том, что вообще скрыть запись из каталога |
Ну и пусть восстановят файл с непонятным именем и содержимым из одних FF |
|
Konstantine |
Отправлено: 15.09.2004, 11:23 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Это неполное решение проблемы... в рде случаев это вызывает подозрение и т.д.
Хотя давай подождём что YanMinsk скажет...
|
|
YanMinsk |
Отправлено: 15.09.2004, 21:33 |
|
Не зарегистрирован
|
Да..... Весело.....
Проблема в том, что надо под Windows причем, какая файловая система заранее не известно (FAT, FAT32 или NTFS). Надо подумать, стоит ли ломать копья или воспользоваться советом Guest-а. Короче завтра в командировку, в понедельник объявлюсь, может, что и придумаем. Пишите у кого какие мысли возникнут. |
|
Konstantine |
Отправлено: 16.09.2004, 08:02 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Если стоит, то для NTFS нада отдельныйй модуль строить... FAT12, FAT16 и FAT32 можно объединить в один. но опять таки винда не даст записать сектор, для Win9x можно конечно VxD написать...
|
|
AVC |
Отправлено: 16.09.2004, 08:09 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Это опять я.
Или перезаписывайте или берите промышленный чистильщик, включите в комплект поставки и вызывайте из свего приложения.
Иначе вам придется рассматривать случаи когда файлы нужно убирать с файл-серверов на Novell, Linux или чем то еще.
Отредактировано AVC — 16/09/2004, 08:19 |
|
Konstantine |
Отправлено: 16.09.2004, 09:44 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Кстати, полезно почитать http://www.lowlevel.ru/articles/filesystems_read.htm
|
|
Boyko |
Отправлено: 17.09.2004, 11:37 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (Guest @ 15/09/2004, 11:07) | Открываете файл
Узнаете его размер
Становитесь на начало
Записываете размер_файла байт со значением, например, FF
Закрываете
Переименовываете файл во что то не важное
Удаляете
Все
|
Я давно писал но еще ползуюсь
CODE |
void MyDeleteFile(AnsiString fileName, int myRecLen)
{
int fileLength, myHandle, recordsNumber;
char wipe[4]={0x00,0xFE,0xFF,0xBF};
char *wipeRecord = new char[myRecLen];
try
{
myHandle = FileOpen(fileName, fmOpenRead);
if (myHandle>-1) {
fileLength = FileSeek(myHandle,0,2);
recordsNumber=fileLength/myRecLen;
FileClose(myHandle);
for (int i=0; i<sizeof(wipe); ++i) {
myHandle = FileOpen(fileName, fmOpenReadWrite);
memset(wipeRecord,wipe[i],myRecLen);
for (int j=0; j<recordsNumber; ++j)
FileWrite(myHandle,wipeRecord,myRecLen);
FileClose(myHandle);
}
DeleteFile(fileName);
myHandle = FileCreate(fileName);
FileClose(myHandle);
DeleteFile(fileName);
}
delete [] wipeRecord;
return;
}
catch(...)
{
...
return;
}
}
| |
|
YanMinsk |
Отправлено: 20.09.2004, 09:55 |
|
Не зарегистрирован
|
Приветствую!
Я подумал и решил не мудрить, хотя, конечно надо было-бы сделать по уму, но я решил сделать так:
Открываем файл
Записываем в него всякую ерунду
Усекаеам размер до нуля(при этом в FAT-е будет остутствовать ссылка на следующий кластер ранее занимаемый файлом, то есть цепочка будет разорвана.)
Переименовываем
Удаляем
Ну вот наверное и все. Всем спасибо. |
|
AVC |
Отправлено: 20.09.2004, 10:13 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE | Усекаеам размер до нуля(при этом в FAT-е будет остутствовать ссылка на следующий кластер ранее занимаемый файлом, то есть цепочка будет разорвана.)
|
Вам советовали — не забивайте голову FAT.
Для справки. Цепочку разрушает (обнуляет) delete. Алгоритм восстановления выглядит так — в каталоге по следам файла находим стартовый кластер, и размер. Если файл меньше кластера 100% восстановление (или не восстановление), иначе ищем по FAT следующие нулевые кластары до заполнения длины файла.
Выводы делайте сами. |
|
Konstantine |
Отправлено: 20.09.2004, 11:48 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Какой вопрос.....
Чел хотел в FAT полезть... Я и рассказал что к чему там. Рассказал какие проблемы при этом возникают... и ОН принял правильное (для себя) решение.
|
|