Ответ 1
В итоге я использовал программу C под названием DirectCopy, написанную Napalm. Он работает довольно хорошо.
http://www.rohitab.com/discuss/topic/24252-ntfs-directcopy-method-from-napalm/
Приложение, которое я пишу, должно иметь возможность копировать заблокированные файлы. Мы попытались использовать копию теневого копирования томов, и, когда она была успешной при копировании файла, приложение, в котором была заблокирована запись, потерпело крах, потому что не удалось получить блокировку во время копирования файла.
Мне остается полагать, что мой единственный вариант - обходить ОС и читать напрямую с диска. Проблема в том, что если я читаю непосредственно на диск, я не могу быть уверен в целостности файла, если он находится в середине записи, файл будет в поврежденном состоянии.
После нескольких часов поиска я смог найти одну утилиту, которая скопировала файл непосредственно с диска и использовала драйвер файловой системы для кэширования записей при копировании, чтобы он мог убедиться, что файл находится в неповрежденном состоянии. Тем не менее, эта утилита необычайно дорога, 100k + для лицензии, которую я, скорее всего, буду использовать.
Есть ли у кого-нибудь идеи о том, как выполнить то, что я пытаюсь сделать?
Мы планируем ограничить систему только томами NTFS.
В итоге я использовал программу C под названием DirectCopy, написанную Napalm. Он работает довольно хорошо.
http://www.rohitab.com/discuss/topic/24252-ntfs-directcopy-method-from-napalm/
Можете ли вы получить идентификатор процесса приложения, которое заблокировано, и приостановить его выполнение во время выполнения копирования? Примерно так http://www.codeproject.com/KB/threads/pausep.aspx
Это описание "многоуровневых драйверов" может оказаться полезным. Я ничего не знаю об этом.
Кроме того, если файл заблокирован, вы можете просто "посмотреть" его и дождаться его разблокировки, а затем быстро скопировать его?