![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
MastaSlash |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2006 Репутация: нет Всего: нет |
Подскажите, как очистить файл который используется каким-то приложением ???? (зная путь к нему).
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
||||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 1 Всего: 7 |
Открыть для записи, очистить, закрыть.
Только при открытии использовать флажки fmSharexxx. И не факт, что получится. Может получиться, только если файл открыт без fmShareDenyWrite или fmShareExclusive. Например, если нажимать F3 на файле в 2х популярных ранее оболочках Volkov Commander и Norton Commander (5.0), то можно увидеть, что первый при открытии файла разрешает в него запись, но второй - нет. --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
Nickel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 7.2.2006 Репутация: 2 Всего: 4 |
http://forum.vingrad.ru/index.php?showtopi...st&p=706816
Тока делай DuplicateHandle без флага DUPLICATE_CLOSE_SOURCE, и через полученный хендл работай с файлом как хочешь. |
|||
|
||||
BinaryEvil |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 4.3.2006 Репутация: -1 Всего: 2 |
убей использующее файл приложение
|
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Несмотря на обилие предположений - никак...
В тот момент, когда файл открыт - он отображен. Куда отображен тебе не известно, хоть в память, хоть в своп, хоть по своему реальному месторасположению. Кстати, на все вышеописанные советы есть простое решение:
|
|||
|
||||
Nickel |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 7.2.2006 Репутация: 2 Всего: 4 |
Я всё-таки настаиваю рассмотреть моё предположение:
Но у этого кода есть один неисправимый недостаток - провисание на пайпах, можно конечно выделить ZwQueryObject в отдельный поток, но тогда этот поток нельзя будет завершить до уничтожения пайпа, на котором он повис (либо до завершения операции IO с этим пайпом, что не факт, что произойдёт).
Если я правильно понимаю MastaSlash'a, то приложение, которое открывает файл не самописное, и даже более того, неизветсно что это за приложение вообще. Конечно как вазиант можно перехватить CreateFile и делать с полученным хендлом что угодно. |
||||||||
|
|||||||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Да пожалуйста...
|
|||
|
||||
Nickel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 7.2.2006 Репутация: 2 Всего: 4 |
Ну извините, вариант когда файл не заблокирован, я думаю можно было бы и отдельно рассмотреть.
Это сообщение отредактировал(а) Nickel - 1.6.2006, 08:52 |
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Пардон, неверно вызов написал:
Во вторых OB_TYPE_FILE равен 28 только под ХР, под другими системами он имеет совершенно другое значение... |
|||
|
||||
Nickel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 7.2.2006 Репутация: 2 Всего: 4 |
Ещё немного поправил в предыдущем посте
![]() |
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Дык не работает же ![]() Вот тебе код библиотеки которая ищет процесс заблокировавший доступ к файлу:
|
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Nickel, кстати, твой код у меня вообще RangeCheckError выдает.
Inf.Information этоже array [0..0]... на второй итэрации цикла и вылетает... -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
Nickel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 7.2.2006 Репутация: 2 Всего: 4 |
Rouse_ спасибо за код, а где именно не работает мой, случайно не подскажешь, потому что у меня всё работает даже этот сомнительный DuplicateHandle (145 строка), который восстанавливает хендл прцоессу, у которого мы его закрывали.
Rennigth формально array [0..0], но ZwQuerySystemInformation запишет туда NumberOfHandles элементов. Вобщем у меня никаких ошибок не выскакивает, у тебя какой делфи? |
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
На ХР будет работать, на 2000 не будет из за OB_TYPE_FILE. Ну и во вторых, этим кодом ты выполнишь только одну задачу - сможешь таки очистить файл, но из-за DUPLICATE_CLOSE_SOURCE приложение отрывшее файл может просто говоря рухнуть. Проще его сразу прибить на корню ![]() Но если же файл был открыт с указанием дескриптора безопасности, данный вариант также не пройдет... Не говоря уже о том, что файл может быть заблокирован из драйвера любым антивирусным монитором. где ты просто не сможешь найти есго хэндл... |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Delphi6, Win2000Pro. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
BinaryEvil |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 4.3.2006 Репутация: -1 Всего: 2 |
можно со старта системы открыть файл монопольно (ну в смысле не давать другим прогам открывать его). а если открыть его с возможностью доступа к нему других прог, эти проги могут его монопольно открывать?
|
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Именно со старта? Если да, то это можно сделать исключительно через драйвер... |
|||
|
||||
LeVuHoang |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
hello,
I can't type Russian here because I don't know Russian, sorry ![]() I hope you can help. I need to write a program like Unlocker. I tried Nickel sample but It frozen at ZwQueryObject. I tried Rouse_ sample also but the demo cannot find the ActiveX (.dll) registered with the system, eg System Context Menu. Do you have any ideas with this ? Thank you |
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Try ZwQueryInformationFile before ZwQueryObject... e.g.
Regards |
|||
|
||||
LeVuHoang |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
This is my GetDirFileName function which will return the Path of Handle from a ProcessID:
I tested with logger, It run but suddenly suspend at:
That mean, There is an unknown error which make NtQueryInformation can't continue and pause at that line. Do you have any idea ? Thanks |
||||
|
|||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
определяй по ходу пьесы. Создавай файл и получай его тип
отключи проверку project/options/compiler/range checking -------------------- Обижено школьников: 8 |
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
bems, ты читаешь полностью все посты или только то, что тебе интересно?
Зачем писать второй раз то, о чем уже сказано? Look decision in my sample (Use a Thread). |
|||
|
||||
LeVuHoang |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
hm... but the application run too slow compare with the Unlocker. Have you got any ideas ?
|
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Unloker, unlike my sample, uses the Driver
![]() |
|||
|
||||
LeVuHoang |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
yah, I see. But I just need to know how can we make a program works perfect like Unlocker
![]() Thank you |
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Try to use SetPriorityClass and SetThreadPriority ;)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |