Задача состоит в создании бекапера . Функции по резервному копированию файлов я знаю . Промбема в получении хендла если файл открыт эксклюзивно. Может кто сталкивался .. PS: ntbackup.exe как то умеет это делать - только как я так и не понял PS2: Не предлагать убить процесс и внедриться в него (все гораздо проще должно быть походу)
А можно кодом? Я делаю так, но ничего не выходит что-то (для заблоканых файлов) (см исходник) _586498132__file_bkp.cpp
TermoSINteZ За столько времени не научился постить темы Опиши способы, которыми ты пытался открыть файл, прочитать; возникающие проблемы. Или готовое ждёшь? Почему не написал, что открывать залоченный файл ты умеешь? Почему не написал, что незалоченный файл читается, а залоченный - нет (или только часть, не помню уже)?
IceStudent )) так и знал .. что это напишешь) ладно отпишу ситуация такова . Залоченые файлы открывать удается. Для этого необходимо в методе досупа указать флаг READ_CONTROL . Но это не помогает в моей цели . Так как этот флаг разрешает читать не данные файла, а атрибуты безопасности.. При чтении файла открытого таким способом удается считать 84 байта (при чем не важно залокан файл или нет - хендл получить удается а вот читается только 84 байта ( это наверно и есть атрибуты безопасности )) .
С Backup API я не сталкивался, но по-идее есть обходное решение. Можно найти хэндл в том процессе, который открыл файл, скопировать его себе и после этого читать. Но способ это хреновый, так как хэндл может не иметь необходимой маски доступа.
Skif а вы предыдущие посты читали ? читали что разор написал а что я ответил ? У вас получилось получить хендл файла открытого эксклюзивно? если нет зачем было писать повторный пост..
Как это делает ntbackup (в WinXP+), можно найти в MSDN за пару минут по ключевым словам Volume Shadow Copy. Если коротко, то вместо, например, \Device\HarddiskVolume0 средствами драйвера Volsnap.sys подставляется \Device\HarddiskVolumeShadowCopyN (N - некий уникальный идентификатор), на котором можно безопасно открывать заблокированные эксклюзивным доступом файлы. Более подробную информацию, есть мнение, стОит искать там же В той же статье (MSDN Magazine, December 2001) есть, правда, один нехороший намек - (ISV = Independent Software Vendor, NDA - Non-disclosure agreement). Так что если спецификации в открытом доступе нет, придется либо связываться с MS, либо idag.exe ntbackup.exe Играть с хэндлами в чужих процессах не рекомендую, это не всегда срабатывает, а в некоторых случаях может привести к невообразимым глюкам (вплоть до BSOD).
Skif а вы уверен что именно через \Device\HarddiskVolumeShadowCopyN эта программа сохраняет файлы ( я имею ввиду случай когда программа дает пользователю выбрать конкретные файлы для бекапа, а не опция полного сохранения харда и тп ) ... Зачем же тогда она использует Backup API если у нее и так полный доступ ко всей информации
Похоже на то - сам ntbackup.exe (в XP и 2k3 Server) при попытке забэкапить эксклюзивно открытый файл сам пишет "preparing to start backup using shadow copy" Вот здесь (http://msdn.microsoft.com/msdnmag/issues/01/12/XPKernel/) есть краткое описание, как это работает (подзаголовок Volume Shadow Copy Service). Да, кстати, похоже спецификация все-же в открытом доступе есть - http://msdn.microsoft.com/library/en-us/vss/base/volume_shadow_copy_re ference.asp (в offline MSDN 2003-его года этой информации ещё нет).
Да.. похоже это единственный документированный способ получить доступ к файлу, если он открыт эксклюзивно.. а у кого есть возможность протестить этот способ (прогу) на 2000 винде? А так, спасибо Skif'у и всем, кто не поленился написать пару строчек. Буду мучаться с созданием теневой копии...
приветствую еще раз почитал я документацию ... и пришел к выводу что : цитата из мсдн: Volume shadow copies require that you use NTFS for your file system. Проверил на FAT32 и точно : ntbackup.exe пишет что невозможно создать теневую копию , приступаю к режиму копированя без теневой копии и естественно обламывается (файл же заблокирован) .. есть идеи ?
Есть, но весьма извращенные. Получить доступ к тому, на котором расположен нужный файл (\\.\X, разобрать файловую систему и читать нужный файл посекторно... В случае FAT12/16/32 задача достаточно простая (для NTFS ситуация хуже, но там работает shadow copy). Исходные тексты "драйверов" FATx в сети есть - можно "оторвать" от ReactOS, например.