Как я открываю каталог с CreateFile в C# для исследования удаленных записей?

Лично я думаю, что необходимо отметить столбцы как Пустой указатель или не пустые на основе того, какие данные они содержат, если существует подлинное требование для данных, чтобы всегда быть там, и известны ли данные всегда во время входа. Отмечание столбца как не пустой, когда у пользователей нет данных, вызовет затем для составления данных, которые делают все данные бесполезными (это, как Вы заканчиваете с данными спама, такими как почтовое поле, содержащее "thisissilly@Ihatethisaplication.com"). При отказе потребовать чего-то, что должно быть там, чтобы процесс работал (говорят, что поле ключа для показа, что клиент сделал порядком) одинаково глупо. Пустой недостаток, не пустой, является проблемой целостности данных в основе, сделайте то, что имеет большую часть смысла к хранению Ваших применимых данных.

5
задан Fred 28 August 2009 в 06:09
поделиться

3 ответа

AFAIK, это довольно сложный процесс. Вы не можете просто использовать CreateFile и перечислить «удаленные файлы». Вы должны загрузить главную файловую таблицу диска и перечислить ее для файлов, помеченных как удаленные, а затем попытаться загрузить данные из позиции на диске, указанной в MFT. Для этого потребуется много кода, вызываемого платформой, и, возможно, несколько переопределений собственных структур данных в C #.

Краткий ответ на ваш вопрос:

CreateFile("\\\\.\\PhysicalDrive0",
            GENERIC_READ,
            FILE_SHARE_READ|FILE_SHARE_WRITE,
            0,
            OPEN_EXISTING,
            0,
            NULL)

Вы используете команду create file, чтобы открыть сам диск.

Вот действительно хорошая статья обо всем процессе над Code Project. Но все это на С ++. Код есть, и кажется, вы знаете, как p \ invoke, так что перенос его не должен быть проблемой.

Редактировать:

Тот факт, что диск является внешним, не должен усложнять задачу, вы все равно можете открыть диск тем же способом, который я показал (возможно, используйте инструмент WMI , чтобы найти путь после подключения диска). Затем вы можете использовать информацию на странице Википедии для FAT32 , чтобы определить структуры данных, в которые вы можете читать MFT и другие части файловой системы. Как только вы попадете туда, вы просто перебираете 32-байтовые определения файлов в таблице каталогов, глядя на первый байт:

0xE5    Entry has been previously erased and is available. File undelete utilities must replace this character with a regular character as part of the undeletion process.
7
ответ дан 14 December 2019 в 01:12
поделиться

Я не уверен, что вы имеете в виду, исследуя удаленные каталоги, но вы сможете получить дескриптор каталога, передав FILE_FLAG_BACKUP_SEMANTICS отметьте в CreateFile и , указав OPEN_EXISTING для настройки создания. Из статьи MSDN о CreateFile :

Чтобы открыть каталог с помощью CreateFile, укажите FILE_FLAG_BACKUP_SEMANTICS flag как часть dwFlagsAndAttributes. Соответствующие проверки безопасности еще применяется, когда этот флаг используется без SE_BACKUP_NAME и SE_RESTORE_NAME привилегии.

Похоже, вы уже пробовали что-то из этого, но прокомментировали? Если это не сработает для вас, вы можете убедиться, что этот пользователь, от имени которого вы работаете, имеет разрешение на доступ к рассматриваемому каталогу.

2
ответ дан 14 December 2019 в 01:12
поделиться

Просто чтобы предложить вам другой подход, в случае, если он уместен, вы всегда можете просто посмотреть каталог с помощью FileSystemWatcher и поймать событие Deleted . Конечно, вам нужно будет смотреть его во время удаления, но это может быть гораздо более простое решение, чем попытка восстановить его (если это возможно).

0
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: