![]() |
Если способы получить доступ на запись к заблокированному файлу другим процессом, не останавливая блокирующий процесc??
|
Пожалуйста конкретней!
|
Цитата:
Задача - внести изменение в файл не останавливая процесс, который блокирует файл. Есть программы типа Unlocker, которые снимают блокировку убивая блокирующий процесс - не годиться. |
Это возможно, но сделать сложно. Надо уметь кодить и знать winapi.
При этом менять содержимое файла не закрывая дескриптор - очень плохая идея. Во-первых это может сломать логику программы и она может покрашиться; либо запишет в файл что-то своё не зная о твоих изменениях и файл закосячится. Можно находить дескриптор файла и закрывать его. Тогда файл не закосячится, но программа всёравно от этого тоже может покрашиться. Унлокер кстати так и делает. Хз с чего ты взял, что он убивает процесс (может просто программа падала из-за вмешательства?). В общем идея хреновая, лучше этого не делать. |
есть вариант, инжект кода в процесс, работаем с хедлом файла,
в это время основной поток этого процесса ставим на паузу потом перед ResumeThread() восстанавливаем все (позиция в файле, и т.д.) |
Цитата:
|
работаем с тем же хедлом, но с другого потока
|
Я правильно понимаю идею?:
1. создать свой процесс. 2.В нем запустить в отдельном дочернем потоке программу, блокирующую доступ к файлу 3. Взять ссылку на хэдл к файлу у этого потока. Как получить хэндл дочернего потока к нужному файлу по имени файла??? 4. Изменить параметры доступа к файлу 5. Внести необходимые изменения сторонним приложением в файл 6.Восстановить параметры доступа к файлу. |
>Как получить хэндл дочернего потока к нужному файлу по имени файла???
а не нужно конкретный поток, получаешь хендл файла и ставишь все потоки на паузу NtQuerySystemInformation(SYSTEM_HANDLE_INFORMATION , ...) - перечисление хендлов, найдешь свой |
Найду свой handle. Дальше будет проверка прав доступа по параметру SECURITY_ATTRIBUTES... в которых права ограничены, в доступе к ресурсу будет отказано... разве не так?
Понял, про инжект упустил.. |
| Время: 18:52 |