Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   Доступ к заблокированному файлу (https://forum.antichat.xyz/showthread.php?t=445710)

Alanez 17.12.2016 00:27

Если способы получить доступ на запись к заблокированному файлу другим процессом, не останавливая блокирующий процесc??

Veil 17.12.2016 02:34

Пожалуйста конкретней!

Alanez 17.12.2016 09:50

Цитата:

Сообщение от Veil
Veil said:

Пожалуйста конкретней!

Приложение создает на диске файл и работает с ним - что-то пишет/читает. При этом доступ к файлу блокирующий - другие приложения не могут открыть файл на чтение/запись.

Задача - внести изменение в файл не останавливая процесс, который блокирует файл.

Есть программы типа Unlocker, которые снимают блокировку убивая блокирующий процесс - не годиться.

pas9x 18.12.2016 23:55

Это возможно, но сделать сложно. Надо уметь кодить и знать winapi.

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

Можно находить дескриптор файла и закрывать его. Тогда файл не закосячится, но программа всёравно от этого тоже может покрашиться. Унлокер кстати так и делает. Хз с чего ты взял, что он убивает процесс (может просто программа падала из-за вмешательства?).

В общем идея хреновая, лучше этого не делать.

master_555 19.12.2016 02:53

есть вариант, инжект кода в процесс, работаем с хедлом файла,

в это время основной поток этого процесса ставим на паузу

потом перед ResumeThread() восстанавливаем все (позиция в файле, и т.д.)

Alanez 20.12.2016 00:45

Цитата:

Сообщение от master_555
master_555 said:

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

при "усыплении треда" разве освободится доступ к файлу?

master_555 20.12.2016 02:00

работаем с тем же хедлом, но с другого потока

Alanez 26.12.2016 22:46

Я правильно понимаю идею?:

1. создать свой процесс.

2.В нем запустить в отдельном дочернем потоке программу, блокирующую доступ к файлу

3. Взять ссылку на хэдл к файлу у этого потока. Как получить хэндл дочернего потока к нужному файлу по имени файла???

4. Изменить параметры доступа к файлу

5. Внести необходимые изменения сторонним приложением в файл

6.Восстановить параметры доступа к файлу.

master_555 02.01.2017 18:14

>Как получить хэндл дочернего потока к нужному файлу по имени файла???

а не нужно конкретный поток, получаешь хендл файла и ставишь все потоки на паузу

NtQuerySystemInformation(SYSTEM_HANDLE_INFORMATION , ...) - перечисление хендлов, найдешь свой

Alanez 11.01.2017 23:46

Найду свой handle. Дальше будет проверка прав доступа по параметру SECURITY_ATTRIBUTES... в которых права ограничены, в доступе к ресурсу будет отказано... разве не так?

Понял, про инжект упустил..


Время: 18:52