Как скопировать заблокированный файл непосредственно с диска и убедиться, что файл не поврежден?


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

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

После нескольких часов поиска мне удалось найти одну утилиту, которая копировала файл непосредственно с диска и использовала драйвер файловой системы для кэширования записей во время копирования, чтобы убедиться, что файл находится в неповрежденном состоянии. Однако эта утилита чрезвычайно дорогая, 100k+ для лицензии, которую я, вероятно, должен был бы использовать.

Есть ли у кого-нибудь идеи о том, как достичь того, что я пытаюсь сделать? куда?

Мы планируем ограничить систему только томами NTFS.

3 12

3 ответа:

Можете ли вы захватить идентификатор процесса приложения, которое имеет блокировку, и приостановить его поток во время выполнения копирования? Что-то вроде этого http://www.codeproject.com/KB/threads/pausep.aspx

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

Что с голосами вниз?

ПРОЧИТАЙТЕ КОММЕНТАРИИ НИЖЕ, ЭТОТ ОТВЕТ СПРАВЕДЛИВ В ОТНОШЕНИИ ЗАДАННОГО ВОПРОСА.

Я закончил с использованием программы на языке C называется DirectCopy написано напалмом. Это работает довольно хорошо.

Http://www.rohitab.com/discuss/topic/24252-ntfs-directcopy-method-from-napalm/

Это Описание "многоуровневых драйверов" может оказаться полезным. Но я ничего об этом не знаю.

Кроме того, если файл заблокирован, то вы можете просто "наблюдать" за ним и ждать, пока он будет разблокирован, а затем быстро скопировать его?