Получение хендла у эксклюзивно открытого файла

Тема в разделе "WASM.WIN32", создана пользователем TermoSINteZ, 7 авг 2005.

  1. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Задача состоит в создании бекапера . Функции по резервному копированию файлов я знаю . Промбема в получении хендла если файл открыт эксклюзивно.

    Может кто сталкивался ..

    PS: ntbackup.exe как то умеет это делать - только как я так и не понял

    PS2: Не предлагать убить процесс и внедриться в него (все гораздо проще должно быть походу)
     
  2. razor

    razor Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    40
    необходимы привилегии :

    "SeBackupPrivilege"

    "SeRestorePrivilege"
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    А можно кодом? Я делаю так, но ничего не выходит что-то (для заблоканых файлов) (см исходник)



    [​IMG] _586498132__file_bkp.cpp
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    TermoSINteZ

    За столько времени не научился постить темы :dntknw:



    Опиши способы, которыми ты пытался открыть файл, прочитать; возникающие проблемы. Или готовое ждёшь?



    Почему не написал, что открывать залоченный файл ты умеешь? Почему не написал, что незалоченный файл читается, а залоченный - нет (или только часть, не помню уже)?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    IceStudent

    )) так и знал .. что это напишешь)

    ладно отпишу



    ситуация такова .

    Залоченые файлы открывать удается. Для этого необходимо в методе досупа указать флаг READ_CONTROL . Но это не помогает в моей цели . Так как этот флаг разрешает читать не данные файла, а атрибуты безопасности.. При чтении файла открытого таким способом удается считать 84 байта (при чем не важно залокан файл или нет - хендл получить удается а вот читается только 84 байта ( это наверно и есть атрибуты безопасности )) .
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    С Backup API я не сталкивался, но по-идее есть обходное решение.

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

    Но способ это хреновый, так как хэндл может не иметь необходимой маски доступа.
     
  7. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    BackupRead/BackupWrite, разумеется, с SeBackupPrivilege и SeRestorePrivilege.
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Skif

    а вы предыдущие посты читали ? читали что разор написал а что я ответил ?

    У вас получилось получить хендл файла открытого эксклюзивно?



    если нет зачем было писать повторный пост..
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    TermoSINteZ

    А я предупреждал..
     
  10. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    Как это делает ntbackup (в WinXP+), можно найти в MSDN за пару минут по ключевым словам Volume Shadow Copy. Если коротко, то вместо, например, \Device\HarddiskVolume0 средствами драйвера Volsnap.sys подставляется \Device\HarddiskVolumeShadowCopyN (N - некий уникальный идентификатор), на котором можно безопасно открывать заблокированные эксклюзивным доступом файлы. Более подробную информацию, есть мнение, стОит искать там же :derisive: В той же статье (MSDN Magazine, December 2001) есть, правда, один нехороший намек -
    (ISV = Independent Software Vendor, NDA - Non-disclosure agreement). Так что если спецификации в открытом доступе нет, придется либо связываться с MS, либо idag.exe ntbackup.exe :derisive:



    Играть с хэндлами в чужих процессах не рекомендую, это не всегда срабатывает, а в некоторых случаях может привести к невообразимым глюкам (вплоть до BSOD).
     
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Skif

    а вы уверен что именно через \Device\HarddiskVolumeShadowCopyN

    эта программа сохраняет файлы ( я имею ввиду случай когда программа дает пользователю выбрать конкретные файлы для бекапа, а не опция полного сохранения харда и тп )

    ...

    Зачем же тогда она использует Backup API если у нее и так полный доступ ко всей информации
     
  12. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    Похоже на то - сам ntbackup.exe (в XP и 2k3 Server) при попытке забэкапить эксклюзивно открытый файл сам пишет "preparing to start backup using shadow copy" :derisive:



    Вот здесь (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-его года этой информации ещё нет).
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Да.. похоже это единственный документированный способ получить доступ к файлу, если он открыт эксклюзивно..

    а у кого есть возможность протестить этот способ (прогу) на 2000 винде?

    А так, спасибо Skif'у и всем, кто не поленился написать пару строчек.

    Буду мучаться с созданием теневой копии...
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    приветствую еще раз

    почитал я документацию ... и пришел к выводу что :

    цитата из мсдн:

    Volume shadow copies require that you use NTFS for your file system.

    Проверил на FAT32 и точно :

    ntbackup.exe пишет что невозможно создать теневую копию , приступаю к режиму копированя без теневой копии и естественно обламывается (файл же заблокирован) ..

    есть идеи ?
     
  15. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    Есть, но весьма извращенные.



    Получить доступ к тому, на котором расположен нужный файл (\\.\X:), разобрать файловую систему и читать нужный файл посекторно...



    В случае FAT12/16/32 задача достаточно простая (для NTFS ситуация хуже, но там работает shadow copy). Исходные тексты "драйверов" FATx в сети есть - можно "оторвать" от ReactOS, например.